Autotyper运行报错TypeError: 'int' object is not iterable求助
解决Autotyper中第二行输入的TypeError问题
首先看你遇到的错误:TypeError: 'int' object is not iterable,这个问题的根源在你这段代码里:
try: line2 = 1 except NameError: break else: for char in line2: # ...输入逻辑
你在try块里直接把line2赋值成了整数1,后面自然没办法对整数做遍历操作(for char in line2),而且这个异常处理的逻辑完全不符合你的需求——你本来是想判断用户有没有输入第二行(也就是line2是不是"none"),但现在的写法完全走偏了。
关键修复点
- 移除错误的try-except块,换成直接判断line2是否不等于"none"的逻辑,同理处理line3和line4。
- 修正循环终止条件:原来的
timeout > future永远不会成立,因为timeout是程序启动时的固定时间戳,应该用当前时间和future比较。 - 完善多行输入的处理逻辑:原来的代码只处理了line1和line2,line3、line4的输入没在循环里执行。
- 补全缺失的导入:你用到了
Key.shift和Key.enter,但代码里没导入Key类,得补上。
修正后的完整代码
import time import random from pynput.keyboard import Controller, Key keyboard = Controller() print('======Welcome to Autotyper v0.5 Currently still in development. We have a maximum of 4 lines, for bugs/suggestions email: alexanderhan00@gmail.com======') # 初始化所有输入行 line1 = input("Please enter your first line: ") line2 = input("Please enter your second line, type none if you don't have one: ") # 只有上一行不是none时才询问下一行 line3 = input("Please enter your third line, type none if you don't have one: ") if line2 != "none" else "none" line4 = input("Please enter your fourth line, This is the last line!! ") if line3 != "none" else "none" hours = input("How many hours would you like to run this? ") retry = input("How long will it take until new message?(Seconds) ") # 计算程序结束的时间戳 future = time.time() + int(hours)*3600 x = 5 print('Move cursor to target') while x > 0: print(int(x)*'.') time.sleep(1) x -= 1 runs = 0 while True: # 输入第一行 for char in line1: keyboard.press(char) keyboard.release(char) time.sleep(0.1) # 换行(如果不需要Shift+Enter,直接用Key.enter即可) keyboard.press(Key.shift) keyboard.press(Key.enter) keyboard.release(Key.shift) keyboard.release(Key.enter) # 输入第二行(如果用户没输入none) if line2 != "none": 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) # 输入第三行(如果用户没输入none) if line3 != "none": for char in line3: 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) # 输入第四行(如果用户没输入none) if line4 != "none": for char in line4: 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 # 检查是否到达设定的运行时长 if time.time() > future: print(f"已运行{runs}次,到达设定时长,程序结束") break # 随机延迟逻辑 random1 = random.randint(0,10) print(f"Random Seconds Added: {random1}") wait_time = int(retry) + random1 print(f"Time to next entry:") for y in range(wait_time, 0, -1): print(y) time.sleep(1)
额外说明
- 换行逻辑:如果你的场景不需要Shift+Enter(比如普通文本框换行),直接把Shift相关的代码删掉,只保留
keyboard.press(Key.enter)和keyboard.release(Key.enter)即可。 - 运行次数统计:现在的终止逻辑优先以时间为准,更符合你设置"运行小时数"的需求。
内容的提问来源于stack exchange,提问作者CircleCzars ACFM
相关产品推荐
相关产品推荐

