Найти - Пользователи
Полная версия: Анализ except типа 'socket.gaierror: [Errno 11004] getaddrinfo failed'
Начало » Network » Анализ except типа 'socket.gaierror: [Errno 11004] getaddrinfo failed'
1
Gregor
Здравствуйте, многоуважаемые питонеры!
Сгенерировано некое исключение, например, - 'socket.gaierror: getaddrinfo failed':
1) Каким образом можно получить строку в некую переменную?
2) Есть ли механизм явного получения номера ошибки?
Спасибо всем!
bw
1. Это как так? В Python переменные не типизированы, так что могут быть строками, без дополнительных манипуляций.
2. Зависит от типа ошибки. Исключения те же объекты, они могут определять или нет те или иные атрибуты.

a. Берём код и читаем его, никто от вас ничего не прячет.
b. >>> help(socket.gaierror)
c. Ну RTFM, если уж ничего не помогает :-).

..bw
py.user.next
>>> import socket
>>> try:
... socket.gethostbyname('abc')
... except socket.gaierror as e:
... print(e)
... print(e.errno)
...
[Errno -2] Name or service not known
-2
>>>
Gregor
“Зависит от типа ошибки. Исключения те же объекты, они могут определять или нет те или иные атрибуты ”, вкупе со ссылкой - буду “переваривать”. Спасибо!
Gregor
py.user.next
>>> import socket
>>> try:
... socket.gethostbyname('abc')
... except socket.gaierror as e:
... print(e)
... print(e.errno)
...
[Errno -2] Name or service not known
-2
>>>
# ****************************************
Отличный пример, - то что хотел. Экспериментируя, я мастерил такие конструкции, кажется, однако до предложения с ключевым словом “as” не дошел, и, видимо дело в этом… Буду изучать. Спасибо большое!
И ещё…
У меня после прогона скрипта результат был таким:
getaddrinfo failed
11001
а у Вас:
Name or service not known
-2
…это с чем связано?
Gregor
Кстати, для начинающих, - нашел замечательную статью “Как изучать объекты Python” по ссылке http://citforum.ru/programming/python/introspec.shtml. Надеюсь, что вопросы после этой статьи будут более осмысленными и более сложными ;)
bw
Тоже надеюсь, а то школота задрала уже, не знают основных принципов профессиональных инженеров: тыкай на все кнопки подряд, должно заработать :-).
Я в подобных случаях (объект непонятного происхождения) dir'ю его и включаю воображение (консоль с дополнением всегда под рукой, например PyShell). Если воображение подводит, смотрю первоисточник. Кстати, отдельные экземпляры ошибок, даже имея один класс, могут различаться по набору атрибутов, например, этим грешит urllib2.URLError/HTTPError.

..bw
py.user.next
Gregor
это с чем связано?
возможно, различия в реализации в линукс и уиндоус
bw
> возможно, различия в реализации в линукс и уиндоус

>>> socket.gethostbyname('abc')
Traceback (most recent call last):
...
gaierror: [Errno -5] С именем хоста не связано ни одного адреса
>>> socket.getaddrinfo('abc', -1)
Traceback (most recent call last):
...
gaierror: [Errno -8] Servname не поддерживается для ai_socktype
>>> socket.getaddrinfo('abc', 9999) # или 80
Traceback (most recent call last):
...
gaierror: [Errno -2] Имя или служба не известны
Debian 6.0 Squeeze (Linux 2.6.32-5-amd64)

Можно диссертацию писать :-).

..bw
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB