какое исключение ловит хххх ошибку в питоне - PullRequest
5 голосов
/ 15 июля 2009

учитывая журнал ошибок трассировки, я не всегда знаю, как перехватить конкретное исключение.

В общем, мой вопрос: как мне определить, какое «кроме» предложение написать для обработки определенного исключения.

пример 1:

  File "c:\programs\python\lib\httplib.py", line 683, in connect
    raise socket.error, msg
error: (10065, 'No route to host')

пример 2:

return codecs.charmap_encode(input,errors,encoding_table)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position(...)

очевиден второй пример:

try:
    ...
except UnicodeDecodeError:
    ...

как мне поймать конкретно первую ошибку?

Ответы [ 3 ]

4 голосов
/ 15 июля 2009

Посмотрите на трассировку стека. Код, который вызывает исключение: raise socket.error, msg.

Итак, ответ на ваш вопрос: Вы должны поймать socket.error.

import socket
...
try:
    ...
except socket.error:
    ...
3 голосов
/ 15 июля 2009

Первый также очевиден, как второй, например.

>>> try:
...     socket.socket().connect(("0.0.0.0", 0))
... except socket.error:
...     print "socket error!!!"
... 
socket error!!!
>>> 
0 голосов
/ 15 июля 2009

Если у вас есть исключение, уникальное для модуля, вы просто должны использовать тот же класс, который использовался для его вызова. Здесь у вас есть преимущество, потому что вы уже знаете, где находится класс исключений, потому что вы его повышаете.

try:
    raise socket.error, msg
except socket.error, (value, message):
    # O no!

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

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