使用Python向Telegram Bot上传PDF文件失败,如何定位代码错误?
代码存在的5个核心问题
- 缺省模块导入:代码中调用了
os.path系列方法,如果没有提前写import os导入模块,会直接抛出名称错误。 - 路径拼接逻辑错误:你定义的
path已经是完整的Windows绝对路径,再用os.path.join和当前脚本所在目录拼接,最终生成的路径是非法路径,程序无法定位到PDF文件。 - 文件打开模式错误:PDF属于二进制格式文件,不能用
r(文本只读)模式打开,文本模式会自动处理换行符等编码内容,直接损坏PDF的二进制结构,必须使用rb(二进制只读)模式打开。 - 文件对象提前关闭:
with语法块结束后会自动关闭打开的文件对象,你在with块外调用send_document传入已经被关闭的input_file,无法正常读取内容。 - 冗余代码无用:你读取了文件内容存入
content变量,但后续全程没有调用该变量,属于无效代码。
修正后可运行的代码
import os def textbooks(update, context): # 直接用完整绝对路径,不需要额外拼接 path = r"C:\Users\Ya'we\Downloads\Python Practice Book (en)(1).pdf" chat_id = update.effective_chat.id # 方法1:直接传文件路径,框架会自动处理读取 return context.bot.send_document(chat_id, document=open(path, 'rb')) # 方法2:用with块保证资源正确释放,在块内完成发送 # with open(path, 'rb') as input_file: # return context.bot.send_document(chat_id, document=input_file)
内容的提问来源于stack exchange,提问作者James Demisse
相关产品推荐
相关产品推荐

