2013-08-11 45 views
60

Làm cách nào tôi có thể lấy tên của một ngoại lệ được nêu trong Python?Làm thế nào để có được tên của ngoại lệ đã bị bắt trong Python?

ví dụ

try: 
    foo = bar 
except Exception as exception: 
    name_of_exception = ??? 
    assert name_of_exception == 'NameError' 
    print "Failed with exception [%s]" % name_of_exception 

Ví dụ, tôi đang đánh bắt nhiều (hoặc tất cả) trường hợp ngoại lệ, và muốn in tên của các ngoại lệ trong một thông báo lỗi.

+2

* Tại sao * làm bạn nghĩ bạn nee d này? Tại sao không bắt ngoại lệ cụ thể hơn (ví dụ: 'ngoại trừ NameError:') để bắt đầu? – delnan

+3

Tôi có một vài tình huống mà tôi muốn bắt tất cả các ngoại lệ (hoặc danh sách các trường hợp này), và muốn in ra tên của ngoại lệ trong một thông báo lỗi. –

+1

Bạn có thể muốn kiểm tra mô-đun ['traceback'] của thư viện chuẩn (https://docs.python.org/3/library/traceback.html), có chức năng thực hiện một số định dạng tốt đẹp về ngoại lệ và tracebacks. – Blckknght

Trả lời

106

Dưới đây là hai cách khác nhau để có được tên của ngoại lệ:

  1. type(exception).__name__
  2. exception.__class__.__name__

ví dụ:

try: 
    foo = bar 
except Exception as exception: 
    assert type(exception).__name__ == 'NameError' 
    assert exception.__class__.__name__ == 'NameError' 
+0

Hoàn hảo! Cảm ơn @Tim! –

0

Tác phẩm này, nhưng có vẻ như phải có một cách trực tiếp dễ dàng hơn và trực tiếp hơn?

try: 
    foo = bar 
except Exception as exception: 
    assert repr(exception) == '''NameError("name 'bar' is not defined",)''' 
    name = repr(exception).split('(')[0] 
    assert name == 'NameError' 
+1

Thay thế 'ngoại trừ Ngoại lệ là ngoại lệ' với loại ngoại lệ bạn muốn bắt, tức là 'ngoại trừ TênError là ngoại lệ'. –

Các vấn đề liên quan