开发Discord自动化数字循环机器人时触发TypeError的str拼接错误原因排查
TypeError 触发根因
报错的直接触发点是这行拼接逻辑:print('Your clip Board is set to ' + i )
Python 原生不支持字符串和整数直接用+做拼接运算:左侧硬编码的提示文本是字符串类型,右侧循环变量i是整数类型,类型不匹配就会抛出can only concatenate str (not "int") to str的错误。
代码中其他会导致运行中断的隐患
for i in range startingnum , 99999999999999):存在语法错误,range()是Python内置函数,调用时必须用括号完整包裹所有传入参数,此处缺失range后的左括号,解释器解析阶段就会报语法错误,根本走不到运行阶段。input()的返回值默认是字符串类型,直接传入后续逻辑会触发多处类型错误:time.sleep()要求输入参数为整数/浮点型秒数,直接传字符串会报参数类型不匹配range()的循环起止值要求为整数类型,直接传字符串会报参数类型错误
clipboard.copy()传入整数时,部分运行环境可能存在兼容问题,建议统一转成字符串后再传入。
修正后的可运行代码
import clipboard import time # 将输入的延迟值转为浮点型,支持非整数秒数的设置 numnum = float(input(" What do you want the delay from each next number? (in seconds) \n\t Please type it here: ")) # 将输入的起始数字转为整数类型 startingnum = int(input(" What do you want the starting number to be? \n\t Please type it here: ")) # 补全range函数的参数括号 for i in range(startingnum, 99999999999999): # 用f-string替代手动拼接,自动处理类型转换避免拼接报错 print(f'Your clip Board is set to {i}') clipboard.copy(str(i)) time.sleep(numnum) print('terminal will close in 5 seconds') time.sleep(5)
内容的提问来源于stack exchange,提问作者Oasis
相关产品推荐
相关产品推荐

