TypeError: 'int' object is not iterable In Autotyper

TypeError: 'int' object is not iterable In Autotyper

我正在尝试创建一个使用用户输入的自动打字机。 对于第一行,自动打字机按预期工作,但在第二行出现错误。请问是不是因为我做的异常?

这是我的完整代码:

import time
import random
from goto import with_goto

keyboard = Controller()
class label(Exception): pass

print('======Welcome to Autotyper v0.5 Currently still in development. We have a maximum of 4 lines, for bugs/suggestions email: alexanderhan00@gmail.com======')
while True:
    line1 = input("Please enter your first line:  ")
    line2 = input("Please enter your second line, type none if you don't have one:  ")
    if line2 == "none":
        break
    line3 = input("Please enter your third line, type none if you don't have one:  ")
    if line3 == "none":
        break
    line4 = input("Please enter your fourth line, This is the last line!!  ")
    break

hours = input("How many hours would you like to run this?     ")
retry = input("How long will it take until new message?(Seconds)     ")
timeout = round(time.time())
future = round(time.time()) + int(60)*int(60)*int(hours)
x = 5
print('Move cursor to target')
while x > 0:
    print(int(x)*'.')
    time.sleep(1)
    x = x-1
runs = 0

while True:
    random.seed()
    random1 = random.randint(0,10)
    for char in line1:
        keyboard.press(char)
        keyboard.release(char)
        time.sleep(0.1)
    keyboard.press(Key.shift)
    keyboard.press(Key.enter)
    keyboard.release(Key.shift)
    keyboard.release(Key.enter)
    try:
        line2 = 1
    except NameError:
        break
    else:
        for char in line2:
            keyboard.press(char)
            keyboard.release(char)
            time.sleep(0.1)
        keyboard.press(Key.shift)
        keyboard.press(Key.enter)
        keyboard.release(Key.shift)
        keyboard.release(Key.enter)
    runs = runs + 1
    if timeout > future or runs == hours*60:
        break
    print("Random Seconds Added:")
    print(int(random1))
    print("Time to next entry:")
    for y in range(int(retry) + int(random1)):
        print(int(retry) + int(random1 - y))
        time.sleep(1)

当我 运行 它时,我得到这个输出:

Please enter your first line:  hi
Please enter your second line, type none if you don't have one:  none
How many hours would you like to run this?     1
How long will it take until new message?(Seconds)     10
Move cursor to target
.....
....
...
..
.
Traceback (most recent call last):
  File "C:\Users\alexa\Desktop\autotyper-random.py", line 49, in <module>
    for char in line2:
TypeError: 'int' object is not iterable
hi

非常感谢任何帮助,谢谢!我是社区新手。

错误是因为这段代码:

try:
    line2 = 1
except NameError:
    break
else:
    for char in line2:
        keyboard.press(char)
        keyboard.release(char)
        time.sleep(0.1)

line2 = 1之后,line2不再包含用户输入的行,而是包含整数1for char in line2 将不再有效,因为您无法遍历整数。

我认为您正在尝试使用 try/except 块来判断用户是否为 line2 输入了内容。但是赋值永远不会报告 NameError,只有在尝试读取尚未赋值的变量时才会出现该错误。此外,读取输入的代码始终分配给 line2,因此您不会收到错误。可能未设置的变量是 line3line4,如果您在前几行输入 none

每当您发现自己使用这样的连续名称创建变量时,您可能应该使用列表而不是单独的变量。阅读所有输入行的方法如下:

lines = []
while True:
    line = input("Please enter your next line, type 'none' if you don't have one")
    if line == "none":
        break
    lines.append(line)

当您想输入它们时:

random.seed()
while time.time() < future and runs < hours*60:
    for line in lines:
        for char in line:
            keyboard.press(char)
            keyboard.release(char)
            time.sleep(0.1)
        keyboard.press(Key.shift)
        keyboard.press(Key.enter)
        keyboard.release(Key.shift)
        keyboard.release(Key.enter)
    runs += 1
    print("Random Seconds Added:")
    print(int(random1))
    print("Time to next entry:")
    for y in range(int(retry) + int(random1)):
        print(int(retry) + int(random1 - y))
        time.sleep(1)

另一个问题是您在循环期间从未更新 timeout,它始终是它开始的时间。