Python 发生套接字错误时,如何从异常中获取其错误代码?
代码如下:Python 发生套接字错误时,如何从异常中获取其错误代码?,python,sockets,exception,error-handling,error-code,Python,Sockets,Exception,Error Handling,Error Code,代码如下: import socket, sys try: address = ('127.0.0.1', 31500) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(address) except Exception: errType, errValue, errTraceback = sys.exc_info() # or # handle the
import socket, sys
try:
address = ('127.0.0.1', 31500)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(address)
except Exception:
errType, errValue, errTraceback = sys.exc_info()
# or
# handle the Exception it throw out ?
我想要得到的是类似于10060
的错误代码,这意味着连接超时
,感谢您的帮助:)使用
except EnvironmentError as e:
print e.errno
@nneonneo也许这不是我想要的,当我尝试连接到套接字时,e.strerror是“连接被拒绝”,其错误代码应为“10061”,但e.errno显示“111”,为什么?您在Windows上吗?Errno 111在Linux上被重新编译。错误号是特定于操作系统的;如果您在Windows上运行,则只能看到10061。@Coaku(+1,这是正确的方法。)如果您只想捕获特定情况,则可以使用避免直接处理错误号。@J.F.Sebastian:这很有意义,因为它不一定与特定的错误号相关联。但是,幸运的是,您可以在
Exception Environment Error
@nneonneo HA上方使用Exception socket.timeout
单独处理它,谢谢,但是当我尝试连接到一个错误的域时,e.errno可能是负数,如“-5”,errno不应该在0到256之间吗?您的Python版本是什么?为什么要使用sys.exc_info()
而不是例如而不是socket.timeout:
来表示超时错误(注意:。在这种情况下,errno是None
)?