2014-10-29 16 views
7

Tôi cố gắng để bắt một ngoại lệ SystemExit trong thời trang sau:Không thể bắt SystemExit ngoại lệ Python

try: 
    raise SystemExit 
except Exception as exception: 
    print "success" 

Tuy nhiên, nó không hoạt động.

Nó làm việc tuy nhiên khi tôi thay đổi mã của tôi như thế:

try: 
    raise SystemExit 
except: 
    print "success" 

Theo như tôi biết, except Exception as exception nên bắt bất kỳ ngoại lệ. Đây là cách nó được mô tả là here. Tại sao không phải là làm việc cho tôi ở đây?

Trả lời

17

documented, SystemExit không được thừa kế từ Ngoại lệ. Bạn sẽ phải sử dụng except BaseException.

Tuy nhiên, đây là vì một lý do:

Trường hợp ngoại lệ được thừa hưởng từ BaseException thay vì StandardError hoặc ngoại lệ để nó không vô tình bắt gặp bởi mã mà bắt ngoại lệ.

Không bình thường khi muốn xử lý các ngoại lệ "thực" giống như cách bạn muốn xử lý SystemExit. Bạn có thể bắt đầu tốt hơn SystemExit một cách rõ ràng với except SystemExit.

+0

Tuyệt vời. Cảm ơn! Nó được minh họa rất rõ trong tài liệu phân cấp Ngoại lệ: https://docs.python.org/2/library/exceptions.html#exception-hierarchy –

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