You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用ftplib传文件时try except的except分支不运行如何解决?

问题根因

  • 你最初的代码错误地把可能抛出异常的FTP连接初始化、本地文件打开操作放在了try块之外,这两行代码触发的异常完全不会被except捕获,所以会直接抛出到终端。
  • 调整后的代码仍然把open(...)操作放在try块外,所以本地文件不存在的异常无法捕获;另外ftplib.all_errors仅覆盖ftplib库自身抛出的异常,本地文件IO相关的异常属于Python内置异常,不在该捕获范围内。

修正方案

把所有可能抛出异常的操作都纳入try块覆盖范围,按异常类型分类捕获逻辑更清晰:

import ftplib

try:
    # 本地文件打开、FTP连接、上传操作全部放在try块内
    file = open("path/test.txt", "rb")
    session = ftplib.FTP("192.168.0.164", "admin", "admin")
    session.storbinary("STOR application/test.txt", file)
except ftplib.all_errors:
    print("FTP操作失败(主机不可达、认证失败、上传错误等)")
except FileNotFoundError:
    print("本地文件不存在,请检查路径")
except Exception as e:
    print(f"其他未知错误:{e}")
else:
    print("success!")
    session.quit()
finally:
    print("DONE!!")
    # 注意判断file是否成功初始化,避免open失败时close报错
    if 'file' in locals() and not file.closed:
        file.close()

补充说明

  • 不要用无差别的裸except,会捕获到比如KeyboardInterrupt(用户手动终止程序)这类你不需要处理的异常,分类捕获更可控。
  • 最终关闭文件前要先判断文件对象是否存在、是否已经关闭,避免文件打开失败时执行file.close()抛出新的异常。

内容的提问来源于stack exchange,提问作者nearbyatom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:06:03