Python脚本发送代理文件至Telegram频道遇缩进错误求助
解决Python Telegram脚本的缩进错误及代码优化
你的脚本运行时的IndentationError是由于代码块缩进不一致导致的,同时还存在文件操作的冗余问题。以下是修正并优化后的完整代码,可实现发送三个代理文件并为第一个文件添加统计标题的需求:
from telegram import Bot, InputMediaDocument BOT_TOKEN = "xxx" CHAT_ID = xxx def count_lines(file_path): """统计文件行数""" with open(file_path, 'rb') as f: return len(f.readlines()) def main(): bot = Bot(BOT_TOKEN) file_paths = ( "proxy/proxies/http.txt", "proxy/proxies/socks4.txt", "proxy/proxies/socks5.txt" ) # 统计各类型代理数量 http_count = count_lines(file_paths[0]) socks4_count = count_lines(file_paths[1]) socks5_count = count_lines(file_paths[2]) text = f"Total HTTPs:{http_count}\nTotal SOCKS4:{socks4_count}\nTotal SOCKS5:{socks5_count}" media_group = list() for f_path in file_paths: with open(f_path, "rb") as fin: # 仅为第一个文件添加标题 caption = text if f_path == file_paths[0] else '' fin.seek(0) media_group.append(InputMediaDocument(fin, caption=caption)) bot.send_media_group(CHAT_ID, media=media_group) if __name__ == "__main__": main()
关键修正点说明:
- 统一缩进:将所有代码块的缩进统一为4个空格,修复了
media_group定义、for循环及内部代码的缩进不匹配问题。 - 移除冗余操作:删除了手动调用
file.close()的代码,with语句会自动完成文件资源的释放,避免重复关闭引发错误。 - 修正文件操作逻辑:将
fin.seek(0)移至with代码块内部,确保在文件打开状态下重置文件指针,避免文件关闭后操作对象失效。 - 代码优化:提取统计行数的逻辑为独立函数
count_lines,减少重复代码,提升代码可读性和可维护性。
内容的提问来源于stack exchange,提问作者Ajesh
相关产品推荐
相关产品推荐

