【问题标题】:Python Socket Error HandlingPython 套接字错误处理
【发布时间】:2016-05-14 15:04:44
【问题描述】:

我正在尝试编写套接字错误处理(确切地说是 err 111 - Connection Refused),但什么也没发生。 Errno 111 发生的终端打印,但它没有做任何事情:

import errno
try:
    #do something
except socket.error, v:
    errorcode=v[0]
    if errorcode==errno.ECONNREFUSED:
        print "Connection Refused"
    else:
        print("Running Application")

Traceback(最近一次调用最后一次):文件“Test.py”, 第 20 行,在 s.connect((IP, PORT)) 文件“/usr/lib/python2.7/socket.py”,第 224 行,在 meth return getattr(self._sock,name)(*args) socket.error: [Errno 111] Connection denied

没有打印其他内容:/ 我做错了什么?

【问题讨论】:

  • 很难说不知道v。试试调试v或者打印v到控制台,可能v[0]不是错误码。
  • 还有一个概念上的错误:打印错误消息并不能在任何有意义的意义上“处理”异常(尽管太多教程认为它可以)。无论名为connect 的代码都需要一个套接字,因此所有打印错误消息的操作都是在调用者尝试使用套接字并且没有任何内容时将异常推送给调用者。现在您已经设法吞下异常,将致命异常移到代码中的其他位置,并且什么也没处理。
  • 我无法重现您的问题。请展示一个我们可以实际运行以查看问题的完整示例。

标签: python


【解决方案1】:

我认为你需要使用 v.args[0] 来获取错误代码。

【讨论】:

  • 索引异常对象还是它的args属性都没有关系。最好访问errno 属性并给对象一个比v 更有意义的名称。
猜你喜欢
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多