Эй, мне интересно, как обращаться с конкретными кодами ошибок. Например, [Errno 111] Connection refused
Я хочу уловить эту конкретную ошибку в модуле сокета и что-то напечатать.
Эй, мне интересно, как обращаться с конкретными кодами ошибок. Например, [Errno 111] Connection refused
Я хочу уловить эту конкретную ошибку в модуле сокета и что-то напечатать.
Если вы хотите получить код ошибки, похоже, это поможет;
import errno
try:
socket_connection()
except socket.error as error:
if error.errno == errno.ECONNREFUSED:
print(os.strerror(error.errno))
else:
raise
Вы можете посмотреть errno
коды ошибок.
На платформах 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
.
Я работаю над Windows и оказался в том же затруднительном положении. Но сообщение об ошибке всегда содержит номер ошибки. Используя эту информацию, я просто конвертирую исключение в строку str(Exception)
, конвертирую код ошибки, я хочу проверить на строку str(socket.errno.ERRORX)
и проверить, не является ли код ошибки в исключении.
Пример подключения reset exception:
except Exception as errorMessage:
if str(socket.errno.ECONNRESET) in str(errorMessage):
print("Connection reset")
#etc...
Это позволяет избежать локальных конкретных решений, но до сих пор не является независимым от платформы.
Кажется, что это трудно сделать надежно/переносимо, но возможно что-то вроде:
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 ***
Довольно yucky хотя.