- 论坛徽章:
- 0
|
最近使用python开发一个基于socket通讯的小程序,为了检测调用socket的函数时可能出现的异常,需要对函数调用进行异常保护处理。于是写了类似如下的代码:
try:
sock.connect(('192.168.1.1', 1024))
except:
(ErrorType, ErrorValue, ErrorTB) = sys.exc_info()
print "Connect server failed: ", ErrorValue
如果出现connect调用失败,则打印出连接失败的原因,如下所示:
Connect server failed: (10061, 'Connection refused')
看到这,可能熟悉C语言开发的人对10061都对这条错误消息感到眼熟,10061就是经常用到的errno,而后面的消息则是对应的错误消息。因此,我们可以对异常消息做一下处理:
try:
sock.connect(('192.168.1.1', 1024))
except:
(ErrorType, ErrorValue, ErrorTB) = sys.exc_info()
(errno, err_msg) = ErrorValue
print "Connect server failed: %s, errno=%d" % (err_msg, errno)
此时,输出结果如下所示:
Connect server failed: Connection refused, errno=10061
进一步分析一下,打印出此时的sys.exc_info():
(class 'socket.error'>, error(10061, 'Connection refused'), traceback object at 0x00D37CB0>)
可以发现此处的异常是class socket.error,对程序作如下的修改:
try:
sock.connect(('192.168.1.1', 1024))
except socket.error, arg:
(errno, err_msg) = arg
print "Connect server failed: %s, errno=%d" % (err_msg, errno)
根据上面的示例,我们可以针对所有的socket函数调用处理异常socket.error,以保证程序的运行正常。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/48729/showart_448060.html |
|