Python обрабатывает конкретные коды ошибок? - PullRequest
25 голосов
/ 02 марта 2011

Эй, мне интересно, как обрабатывать конкретные коды ошибок. Например, [Errno 111] Connection refused

Я хочу отловить эту конкретную ошибку в модуле сокета и напечатать что-нибудь.

Ответы [ 4 ]

36 голосов
/ 02 марта 2011

Если вы хотите получить код ошибки, похоже, это поможет;

import errno

try:
    socket_connection()
except socket.error as error:
    if error.errno == errno.ECONNREFUSED:
        print(os.strerror(error.errno))
    else:
        raise

Вы можете посмотреть errno коды ошибок .

27 голосов
/ 02 марта 2011

На платформах 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.

0 голосов
/ 08 января 2018

Я занимаюсь разработкой для Windows и оказался в том же затруднительном положении.Но сообщение об ошибке всегда содержит номер ошибки.Используя эту информацию, я просто преобразовываю исключение в строку str(Exception), преобразую код ошибки, который я хочу проверить, в строку str(socket.errno.ERRORX) и проверяю, находится ли код ошибки в исключении.

Пример подключенияисключение сброса:

except Exception as errorMessage:
    if str(socket.errno.ECONNRESET) in str(errorMessage):
        print("Connection reset")
        #etc...

Это позволяет избежать решений, специфичных для локали, но, к сожалению, не зависит от платформы.

0 голосов
/ 02 марта 2011

Кажется, это трудно сделать надежно / переносимо, но, возможно, что-то вроде:

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 ***

Хотя довольно отвратительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...