Thực tế nói, có có sự khác biệt giữaexcept:
và except BaseException:
, đối với bất kỳ phiên bản Python hiện hành.
Đó là vì bạn không thể chỉ tăng bất kỳ loại đối tượng nào làm ngoại lệ. Các raise
statement rõ ràng không cho phép nâng cao bất kỳ điều gì khác:
[...] nâng cao đánh giá biểu thức đầu tiên làm đối tượng ngoại lệ. Nó phải là một phân lớp hoặc một thể hiện của BaseException
.
Mỏ nhấn mạnh đậm. Tuy nhiên, điều này không phải lúc nào cũng xảy ra, trong các bản phát hành Python cũ hơn (2.4 và trước đó), bạn cũng có thể sử dụng chuỗi làm ngoại lệ.
Lợi thế sau đó là bạn có thể dễ dàng truy cập ngoại lệ bị bắt. Để có thể thêm as targetname
, bạn phải bắt một loại ngoại lệ cụ thể và chỉ BaseException
sẽ thực hiện việc đó.
Bạn vẫn có thể truy cập vào các ngoại lệ đang hoạt động bằng cách sử dụng sys.exc_info()
mặc dù:
except:
be = sys.ext_info()[1]
Chọn những gì bạn cảm thấy là có thể đọc được nhiều hơn cho bản thân trong tương lai của bạn và đồng nghiệp của bạn.
Nguồn
2017-06-20 14:31:38
Trừ khi bạn chưa đặt một cái gì đó như 'BaseException = ValueError' trước ;-)' except: 'đảm bảo luôn luôn ngoại trừ bất kỳ lỗi nào. –
@a_guest: vâng, * tên * vẫn có thể được phục hồi. 'builtins.BaseException' là một dự phòng đẹp, nhưng không phải là một cách dễ dàng. –