Форум сайта python.su
Здравствуйте, многоуважаемые питонеры!
Сгенерировано некое исключение, например, - 'socket.gaierror: getaddrinfo failed':
1) Каким образом можно получить строку в некую переменную?
2) Есть ли механизм явного получения номера ошибки?
Спасибо всем!
Офлайн
1. Это как так? В Python переменные не типизированы, так что могут быть строками, без дополнительных манипуляций.
2. Зависит от типа ошибки. Исключения те же объекты, они могут определять или нет те или иные атрибуты.
a. Берём код и читаем его, никто от вас ничего не прячет.
b. >>> help(socket.gaierror)
c. Ну RTFM, если уж ничего не помогает :-).
..bw
Офлайн
>>> import socket
>>> try:
... socket.gethostbyname('abc')
... except socket.gaierror as e:
... print(e)
... print(e.errno)
...
[Errno -2] Name or service not known
-2
>>>
Офлайн
“Зависит от типа ошибки. Исключения те же объекты, они могут определять или нет те или иные атрибуты ”, вкупе со ссылкой - буду “переваривать”. Спасибо!
Офлайн
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
>>>
Офлайн
Кстати, для начинающих, - нашел замечательную статью “Как изучать объекты Python” по ссылке http://citforum.ru/programming/python/introspec.shtml. Надеюсь, что вопросы после этой статьи будут более осмысленными и более сложными ;)
Офлайн
Тоже надеюсь, а то школота задрала уже, не знают основных принципов профессиональных инженеров: тыкай на все кнопки подряд, должно заработать :-).
Я в подобных случаях (объект непонятного происхождения) dir'ю его и включаю воображение (консоль с дополнением всегда под рукой, например PyShell). Если воображение подводит, смотрю первоисточник. Кстати, отдельные экземпляры ошибок, даже имея один класс, могут различаться по набору атрибутов, например, этим грешит urllib2.URLError/HTTPError.
..bw
Офлайн
Gregorвозможно, различия в реализации в линукс и уиндоус
это с чем связано?
Офлайн
> возможно, различия в реализации в линукс и уиндоус
>>> 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] Имя или служба не известны
Отредактировано (Окт. 10, 2011 10:28:22)
Офлайн