回答
如果你想得到错误代码,这似乎是伎俩;
import errno
try:
socketConnection()
except socket.error, v:
errorcode=v[0]
if errorcode==errno.ECONNREFUSED:
print "Connection Refused"
您可以查阅errno
error codes。
这似乎很难做到可靠/可移植的,但也许是这样的:
import socket
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 4167))
except socket.error, e:
if 'Connection refused' in e:
print '*** Connection refused ***'
这将产生:
$ python socketexception.py
*** Connection refused ***
相当难吃虽然。
为什么你会说这不可靠/不便携?这是什么“猥琐的”? –
因为我不是100%确定在Windows上的异常消息将有“连接被拒绝”,并且不是像“无法连接”那样相似但不同的东西。不确定这些错误消息是否标准化(例如:在POSIX中),并且并非所有平台都必须符合POSIX标准。 –
(-1)警告:这会在非英语区域中完全失败。 – sum1stolemyname
在Unix平台上,至少可以执行以下操作。
import socket, errno
try:
# Do something...
except socket.error as e:
if e.errno == errno.ECONNREFUSED:
# Handle the exception...
else:
raise
的Python 2.6之前,使用e.args[ 0 ]
代替e.errno
。
通常优先使用'e.errno'而不是'e.args [0]'(对于使用errnos的异常)。 –
我以为这是开始,但在我的Mac上测试它似乎'socket.error'没有'errno'成员。事实证明,在Python 2.6之前,'socket.error'不是'IOError'的子类,所以没有'errno'成员。但是,当然,在Python 2.6之前,“除了t as e语法”也是无效的......我会更新我的代码。 – jchl
我在Windows上开发,发现自己陷入了同样的困境。但错误消息始终包含错误号。使用这些信息,我只是将异常转换为字符串str(Exception)
,将我想检查的错误代码转换为字符串str(socket.errno.ERRORX)
并检查错误代码是否在异常中。
例如,用于连接复位异常:
except Exception as errorMessage:
if str(socket.errno.ECONNRESET) in str(errorMessage):
print("Connection reset")
#etc...
这样就避免了区域特定的解决方案,但仍不能独立于平台的不幸。
- 1. Python的SMTP错误代码处理
- 2. 错误代码处理
- 3. 处理错误代码
- 4. Quantmod错误处理错误代码
- 5. Python代码错误“处理完成退出码0”
- 6. ASHX代码中的错误处理
- 7. 批处理文件的错误代码
- 8. python https代理错误代码400,401
- 9. 根据node.js中的错误代码处理错误的错误
- 10. 错误处理python
- 11. 在r代码中处理ftp错误
- 12. Excel VBA错误处理代码
- 13. 错误代码在vb.net上处理
- 14. Grails remoteLink处理错误代码
- 15. 处理错误重构程序代码
- 16. Teamcenter |服务器|代码错误处理
- 17. C++预处理错误代码
- 18. 你如何处理LicenseCheckerCallback.ERROR_NOT_MARKET_MANAGED错误代码?
- 19. 使用Restangular处理错误代码(401,403)
- 20. 如何错误处理java代码
- 21. 批处理文件 - 错误代码
- 22. 如何处理CORS错误代码?
- 23. AngularJS AJAX状态代码错误处理
- 24. 数据处理代码段错误
- 25. Actionscript 3错误代码1119处理this.parent?
- 26. 如何处理SQLiteConstraintException错误代码19?
- 27. Postgres JDBC:PSQLException的特定错误代码?
- 28. 多处理和python代码
- 29. 并行处理python代码
- 30. python中的错误处理
在OSX上,'ECONNREFUSED'看起来是61而不是111,所以对111值进行硬编码对于可移植性来说是个坏主意。 – jchl
你是对的。我相信有更多这样的案例。 –
有一个'else:raise'很重要,否则所有其他的错误代码将被默默地忽略! – jtpereyda