文件发送异常:调用send_document后文件未成功发送
问题描述
用户发送文件名后,fd函数以数组格式返回正确的文件绝对路径(示例:['C:\Users\vlash\Documents\test1.txt']),但调用send_document传入该路径后,函数执行无任何反应,文件未发送至用户聊天窗口。相关代码如下:
@router.message(WorkFind.find) async def find(message: Message, state: FSMContext): await message.answer( f'Ask' ) path1 = [f"C:\\Users\\vlash\\Documents"] data = message.text if len(fd(path1, data)) > 0: for i in fd(path1, data): try: await message.bot.send_message(message.from_user.id, "Good answer") await message.bot.send_document( chat_id = message.from_user.id, document=FSInputFile(path = i), caption = "231231231231") # await message.bot.send_document(chat_id=message.from_user.id, ) except: await message.bot.send_message(message.from_user.id, "K.O.") else: await message.bot.send_message(message.from_user.id, 'AAAAAAAAAAAAAA') await message.bot.send_message(message.from_user.id, "Compliete") await state.clear()
注:已尝试将FSInputFile存入变量,也手动输入过文件路径及名称,问题依旧。
排查与解决建议
精准捕获异常信息:当前
try-except未指定异常类型,也未输出错误详情,无法定位问题。修改为:except Exception as e: await message.bot.send_message(message.from_user.id, f"错误详情: {str(e)}")通过错误信息可直接定位是路径错误、权限问题还是API调用异常。
验证文件路径与权限:
- 确认
fd返回的路径无拼写错误,可打印路径值核对; - 检查程序是否有读取该文件的权限(比如Windows下Documents文件夹的访问限制);
- 尝试用绝对路径手动指定一个测试文件,确保文件真实存在且可读取。
- 确认
优化
FSInputFile使用:- 确认已正确导入模块:
from aiogram.types import FSInputFile; - 路径可使用原始字符串避免转义问题,比如
FSInputFile(r"C:\Users\vlash\Documents\test1.txt")。
- 确认已正确导入模块:
避免重复调用
fd:多次调用fd(path1, data)会浪费资源,先将结果存入变量再处理:file_paths = fd(path1, data) if file_paths: for i in file_paths: # 后续处理逻辑检查Bot状态与权限:
- 确认Bot的API Token有效;
- 确认用户未拉黑Bot,Bot可正常发送普通消息给用户(当前代码能发送"Good answer",这一步大概率没问题,但仍需确认)。
修改后的示例代码
@router.message(WorkFind.find) async def find(message: Message, state: FSMContext): await message.answer('Ask') path1 = [r"C:\Users\vlash\Documents"] data = message.text file_paths = fd(path1, data) if file_paths: for file_path in file_paths: try: await message.bot.send_message(message.from_user.id, "Good answer") # 打印路径用于调试 print(f"准备发送文件: {file_path}") await message.bot.send_document( chat_id=message.from_user.id, document=FSInputFile(file_path), caption="231231231231" ) except Exception as e: await message.bot.send_message(message.from_user.id, f"发送失败: {str(e)}") else: await message.bot.send_message(message.from_user.id, '未找到匹配文件') await message.bot.send_message(message.from_user.id, "操作完成") await state.clear()
内容的提问来源于stack exchange,提问作者q_kara_p
相关产品推荐
相关产品推荐

