Python使用Tweepy开发Twitter bot遇int() base10转换ValueError如何解决
问题排查与解决方案
错误触发原因
- 核心问题来自
last_seen.txt的文件内容:read_last_seen函数会直接读取文件内容转换为int类型,但此时文件内的内容不是合法的十进制数字,混入了反引号、空格等非数字字符,你报错信息里显示待转换的内容是反引号,说明文件被误写入了这个符号。 - 代码缺少首次运行兼容逻辑:第一次运行项目时如果
last_seen.txt是空白文件,读取到的内容是空字符串,本身就会触发int转换失败的报错。
解决方法
1. 清理本地配置文件
打开项目目录下的last_seen.txt,删除所有内容,填入一个合法的起始推文ID即可。如果不知道初始ID填什么,可以先填1,首次运行会从你账号收到的最早的@提醒开始处理。
2. 优化代码增加容错逻辑
可以给文件读写部分加异常捕获,同时改用with语句操作文件,避免手动调用close()时因程序异常退出导致的文件内容写入失败问题,优化后的代码如下:
import time import tweepy FILE_NAME = 'last_seen.txt' def read_last_seen(FILE_NAME): try: with open(FILE_NAME, 'r') as file_read: content = file_read.read().strip() # 校验内容是否为纯数字 if content.isdigit(): return int(content) # 内容非法时返回默认起始值 return 1 except (FileNotFoundError, ValueError): # 兼容文件不存在、内容转换失败的所有异常情况 return 1 def store_last_seen(FILE_NAME, last_seen_id): with open(FILE_NAME, 'w') as file_write: file_write.write(str(last_seen_id)) def reply(): tweets = api.mentions_timeline(read_last_seen(FILE_NAME), tweet_mode='extended') for tweet in reversed(tweets): if '#weatherbot_gif' in tweet.full_text.lower(): print(f"{tweet.id} - {tweet.full_text}") api.update_status(f"@{tweet.user.screen_name} Auto reply, like, and retweet works :)", tweet.id) api.create_favorite(tweet.id) api.retweet(tweet.id) store_last_seen(FILE_NAME, tweet.id) # 补充你的Twitter API鉴权逻辑,示例如下,密钥从Twitter开发者平台获取 # auth = tweepy.OAuthHandler("你的API_KEY", "你的API_SECRET") # auth.set_access_token("你的ACCESS_TOKEN", "你的ACCESS_TOKEN_SECRET") # api = tweepy.API(auth, wait_on_rate_limit=True) while True: reply() time.sleep(15)
注意事项
- 确保你已经完成了
api对象的鉴权初始化,未正确填入密钥会触发后续接口调用报错。 - 如果你使用的是最新版tweepy库,部分接口命名和老版本有差异,遇到接口不存在的报错对应调整调用方式即可。
内容的提问来源于stack exchange,提问作者Inoxstasy
相关产品推荐
相关产品推荐

