【问题标题】:try except not running except part尝试除了不运行,除了部分
【发布时间】:2021-11-08 20:06:31
【问题描述】:

我有一个短代码,可以将一个小文件通过 ftp 传输到服务器中。

session = ftplib.FTP("192.168.0.164", "admin", "admin")
file = open("path/test.txt", "rb")
try:
    session.storbinary("STOR application/test.txt", file)
except:
    print("failed")
else:
    print("success!")
file.close()

在上面的部分中,我将 IP 地址更改为它会失败(没有 192.168.0.164 设备)并且它不会像预期的那样打印失败。在终端我得到一个 “连接方在一段时间后没有正确响应,或者由于连接的主机没有响应而建立连接失败”错误。

如果我输入错误的路径,我也不会在终端上打印失败。

如果我输入正确的 IP,成功的部分就可以了。

我是否使用了 try/except 错误?

更新:

当前代码如下所示:

file = open("path/test.txt", "rb")
try:
    session = ftplib.FTP("192.168.0.161", "admin", "admin")
    session.storbinary("STOR application/test.txt", file)
except:
     print("Unable to reach host")
else:
    print("success!")
    session.quit()
finally:
    print ("DONE!!")
    file.close()

我认为 ftplib.all_errors 将捕获所有错误(主机无法访问,并且找不到文件)。它似乎捕获了无法访问主机错误,但没有文件未找到错误。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    我是不是用错了try/except

    您的语法是正确的,但 Python 实际上根本没有到达 try 块。

    当您在无法访问host 的情况下调用session = ftplib.FTP(host, ...) 时,代码将停在那里。那是因为FTP.__init__() 贪婪地调用self.connect()。这将反过来调用socket.create_connection(),这对于无法访问的主机将不会成功。

    所以,你需要修改为:

    with open("path/test.txt", "rb") as file:
        try:
            session = ftplib.FTP("192.168.0.164", "admin", "admin")
            session.storbinary("STOR application/test.txt", file)
        except Exception as e:
            print("failed")
            print(e)
        else:
            print("success!")
        finally:
            session.quit()
    

    【讨论】:

    • 嗨。我试过你的作品,如果主机无法访问,它确实有效。但是假设路径不正确(或找不到文件)现在我有 python 失败说没有这样的文件或目录(而不是运行除外。)另外,我是否必须使用 session.quit “退出”我的会话() 在 file.close() 之后?
    • 应该将其全部包装在 with 块中。这就是python处理文件操作的方式。关于文件错误,您仍然需要except FileNotFoundError 来妥善处理它。
    • 是的,你应该使用session.quit()。如果你能保证这段代码只会在try块的第一行引发异常,你可以quit()else块中的会话。否则,您可能会在定义会话后引发异常,但不会调用 session.quit(),因为它是 else 块的一部分。在这些情况下,finally 块可能会派上用场。
    • 谢谢!原谅菜鸟的问题,但是我如何在 with 块中“全部包装”?我已经有一个例外异常作为 e:,我应该只使用第二个例外块,除了 FileNotFoundError?
    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 2013-04-25
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多