Tôi chưa bao giờ hoàn toàn hài lòng với nội dung ngoại lệ của Python. Nó hoạt động tốt trong thực tế, đó là lý thuyết làm phiền tôi. :-) Đặc biệt, bởi vì mọi thứ đều năng động, ngay cả khi bạn biết rằng evil()
chỉ tăng số ZorgError
và gọi số spam()
tăng EggsError
, do đó, bạn có thể nhận được hai lỗi đó từ một cuộc gọi tới số evil()
. và thay đổi điều này.
Điều đó nói rằng, một số tài liệu tốt hơn các tài liệu khác. Ví dụ: os.kill
rõ ràng có thể tăng OSError
nếu số kill
không thành công và TypeError
nếu bạn gọi nó bằng một số khác với hai số nguyên, nhưng bạn có biết nó cũng có thể tăng OverflowError
không?
>>> os.kill(9999999999999, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: signed integer is greater than maximum
Nếu bạn đang cố gắng để viết một cách hợp lý đang chống đạn mà làm những việc như đọc một pid-file và thăm dò để xem nếu một quá trình đang chạy, nó quay ra bạn phải bắt OverflowError
này trong trường hợp pid trong tệp pid là một số nguyên nhưng nằm ngoài phạm vi. Nó sẽ được tốt đẹp nếu điều này là trong tài liệu (tôi thấy nó thông qua tra tấn thử nghiệm để thay thế.)
Đơn giản chỉ cần bắt tất cả mọi thứ (except:
hoặc except Exception
) thường là không phù hợp vì nó thường bắt quá nhiều (bao gồm, ví dụ, RuntimeError
từ tràn ngăn xếp). Vậy làm thế nào để bạn biết những gì để nắm bắt? Tôi nghĩ rằng nó có thể là tốt đẹp nếu các chức năng lá trong thư viện chuẩn có một "ngoại lệ tôi nâng cao trực tiếp" thuộc tính hoặc yêu cầu tài liệu, nhưng nó chỉ không có.
Chỉnh sửa: Tôi đã lưu ý trong một nhận xét ở trên rằng tài liệu json đề cập đến ValueError
một cách rõ ràng. Không được gọi rõ ràng, nhưng được tìm thấy trong các bài kiểm tra tự của json, là UnicodeDecodeError
(điều hiển nhiên khi bạn nghĩ về nó) và AttributeError
(không rõ ràng). Tài liệu cũng đề cập rằng bạn có thể nhận được OverflowError
.Tất nhiên, nếu bạn sử dụng json.dump
, trong đó có một dòng mà trên đó để viết, bạn có thể nhận được tất cả các lỗi của dòng là tốt. Loại điều này là lý do tại sao "danh sách ngoại lệ zorg()
tăng trực tiếp" không phải lúc nào cũng hữu ích.
Cũng lưu ý: tài liệu cũng đề cập đến 'ValueError'. – torek