回答
如果你想得到錯誤代碼,這似乎是伎倆;
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