2015-02-07 6 views
1

я в настоящее время код форматаТип печати исключений в Python с использованием Errno

try: 
    .... 
except(HTTPError, URLError, socket.error) as e: 
    print "error({0}):{1}".format(e.errno, e.strerror) 
continue 

Но хочу знать, какой из трех вызвал исключение. Есть ли способ сделать это в python?

+4

Unnest в Try/и поймать кроме арматуры их по отдельности. Или используйте 'isinstance'. –

ответ

1

Если это важно для вас по-разному реагируют то вы должны поймать их по отдельности:

try: 
    do_something() 
except HTTPError: 
    handle_HTTPError() 
except URLError: 
    handle_URLError() 
except socket.error: 
    handle socketerror() 

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

>>> try: 
...  raise IOError(911, "Ouch!") 
... except IOError as e: 
...  print "error({0}):{1}".format(e.errno, e.strerror) 
...  print repr(e) 
... 
error(911):Ouch! 
IOError(911, 'Ouch!') 

С точки зрения информации, отображаемой, есть очень мало разницы между печатной строки вы положили вместе и просто собирается с repr. Если вы действительно хотите «довольно» сообщения для печати или журнала, вы можете манипулировать строку к содержимому вашего сердца, но type(e) не спасет вас никаких усилий, он не предназначен для отображения/протоколирования:

>>> type(e) 
<type 'exceptions.IOError'> 
0
def exception(): 
    try: 
     //code that could raise a ValueError or TypeError 
    except ValueError as e: 
     print "ValueError" 
    except TypeError as e: 
     print "TypeError" 

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

1

Try используя e.__class__.__name__. Он вернет такие значения, как "ValueError" или "TypeError".

Вы также можете просто использовать e.__class__, который дает значения как <type 'exceptions.TypeError'>