Twitter回复Bot读取推文ID报错求助:int()转换无效
问题解决:Twitter回复机器人存储已回复ID报错
核心问题分析
你遇到的invalid literal for int() with base 10错误,本质是两个关键问题导致的:
- 函数参数命名不合法:
reply.txt包含点号,不符合Python变量命名规则,你的代码其实连语法检查都过不了这一关。 - 空文件/无效内容转换失败:即使参数名改对了,如果文件为空、内容是空白字符或者非整数文本,
int()转换就会抛出ValueError。
修正后的代码
直接替换你原来的两个函数,解决所有问题:
def read_last_seen(filename): try: with open(filename, 'r') as file_read: content = file_read.read().strip() # 内容为空时返回初始ID(比如0,可根据需求调整) return int(content) if content else 0 except (FileNotFoundError, ValueError): # 文件不存在或内容无效时,返回初始ID return 0 def store_last_seen(filename, last_seen_id): with open(filename, 'w') as file_write: file_write.write(str(last_seen_id))
关键改动说明
- 合法参数名:把
reply.txt换成filename,符合Python变量命名规范,同时让函数更通用,能适配不同文件名。 - 自动文件管理:用
with语句操作文件,它会在代码块结束后自动关闭文件,避免手动close()可能出现的资源泄漏。 - 异常与空值处理:
- 捕获
FileNotFoundError:第一次运行机器人时,reply.txt还没创建,直接返回初始ID(比如0)。 - 捕获
ValueError:如果文件里的内容不是有效整数(比如误写了字符串),也返回初始ID,避免程序崩溃。 - 先判断内容是否为空,为空时直接返回初始ID,提前规避空字符串转int的错误。
- 捕获
使用示例
调用函数时传入你的文件名即可:
# 读取上次回复的推文ID last_replied_id = read_last_seen('reply.txt') # 处理完推文后,存储最新的已回复ID store_last_seen('reply.txt', latest_tweet_id)
内容的提问来源于stack exchange,提问作者GeneralBaconnn
相关产品推荐
相关产品推荐

