gpt4 book ai didi

python - ftplib,如何在没有 errno 属性的情况下管理异常?

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:52 24 4
gpt4 key购买 nike

如果文件不存在,我想将文件上传到 ftp 站点。这是一个更复杂的应用程序的任务,但在本例中并不重要。我的想法是使用 FTP.size(filename) 方法检查文件是否存在,如果错误为 550(系统找不到指定的文件),则上传文件。

我的(不工作)代码:

from ftplib import *
ftp = FTP("ftp.test.com", "user", "password")
try:
ftp.size("123.zip")
except ftplib.all_errors, e:
if e.errno == 550:
print "UPLOAD"
else:
print str(e)

返回的错误是

Traceback (most recent call last):
File "<pyshell#106>", line 4, in <module>
if e.errno == 550:
AttributeError: 'error_perm' object has no attribute 'errno'

或者如果发生临时错误:

AttributeError: 'error_temp' object has no attribute 'errno'

我发现管理返回码的唯一解决方案是:

except ftplib.all_errors, e:
if str(e.args[0]).split(" ", 1)[0] == "550":
print "UPLOAD"
else:
print str(e)

但我想有一个最好的解决方案,因为只有当错误号是异常消息中的第一个词时,这个方法才有效。

提前致谢!

最佳答案

我不知道该错误的确切属性,所以您可以做的是在 except 子句激活时打印 dir(e)。然后您将看到错误的所有属性。一个几乎从不作为标志失败的是“error.message”,它是一个字符串,因此您可以用它构建 if 子句。

你会以这样的方式结束

try:
ftp.size("123.zip")
except ftplib.all_errors as e:
if e.message == 'message of the error'
print 'UPLOAD'
else:
print str(e)

顺便说一句,消息是执行 str(e) 时得到的一件事。

关于python - ftplib,如何在没有 errno 属性的情况下管理异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13931043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com