Computer >> Máy Tính >  >> Lập trình >> Python

Có cách tiêu chuẩn nào để sử dụng chuỗi ngoại lệ trong Python 3 không?

Trong quá trình xử lý một ngoại lệ ‘A’, có thể xảy ra một ngoại lệ ‘B’ khác. Trong các phiên bản Python 2.0, nếu điều này xảy ra, ngoại lệ B được truyền ra bên ngoài và ngoại lệ A bị mất. Sẽ rất hữu ích nếu bạn biết về cả hai trường hợp ngoại lệ để khắc phục sự cố.

Đôi khi, rất hữu ích khi trình xử lý ngoại lệ cố tình nâng cao lại một ngoại lệ, để cung cấp thêm thông tin hoặc dịch một ngoại lệ sang một kiểu khác. Thuộc tính __cause__ cung cấp một cách rõ ràng để ghi lại nguyên nhân trực tiếp của một ngoại lệ.

Chuỗi ngoại lệ chỉ có sẵn trong Python 3. Python 3 có các ngoại lệ nâng ... từ mệnh đề lên chuỗi. Chúng tôi viết lại mã đã cho bằng mệnh đề raise..from như sau

try:
s = {‘a’:1, ‘b’:2}['c']
except KeyError as e:
raise ValueError('failed') from e

Python 3 theo mặc định sẽ hiển thị tất cả các ngoại lệ xảy ra trong quá trình xử lý ngoại lệ, như thế này:

Traceback (most recent call last):
File "source_file.py", line 2, in <module>
s = {'a':1, ‘b’:2}['c']
KeyError: 'c'

Ngoại lệ trên là nguyên nhân trực tiếp của ngoại lệ sau:

Traceback (most recent call last):
File "source_file.py", line 4, in <module>
raise ValueError('failed') from e
ValueError: failed