Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

มีวิธีมาตรฐานในการใช้กลุ่มข้อยกเว้นใน Python 3 หรือไม่?


ระหว่างการจัดการกับข้อยกเว้น 'A' หนึ่ง เป็นไปได้ว่าอาจมีข้อยกเว้น 'B' อื่นเกิดขึ้น ในเวอร์ชัน Python 2.0 หากเป็นเช่นนี้ ข้อยกเว้น B จะถูกเผยแพร่ออกไปภายนอก และข้อยกเว้น A จะหายไป เป็นประโยชน์ที่จะทราบเกี่ยวกับข้อยกเว้นทั้งสองเพื่อแก้ปัญหา

บางครั้งจะเป็นประโยชน์สำหรับตัวจัดการข้อยกเว้นในการจงใจยกข้อยกเว้นขึ้นใหม่ ไม่ว่าจะเป็นการให้ข้อมูลเพิ่มเติมหรือเพื่อแปลข้อยกเว้นเป็นประเภทอื่น แอตทริบิวต์ __cause__ ให้วิธีการที่ชัดเจนในการบันทึกสาเหตุโดยตรงของข้อยกเว้น

การโยงข้อยกเว้นมีเฉพาะใน Python 3 เท่านั้น Python 3 มีการยก ... จากข้อเป็นข้อยกเว้นของลูกโซ่ เราเขียนโค้ดที่ได้รับใหม่โดยใช้การยก..จากข้อดังนี้

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

โดยค่าเริ่มต้น Python 3 จะแสดงข้อยกเว้นทั้งหมดที่เกิดขึ้นระหว่างการจัดการข้อยกเว้นดังนี้:

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

ข้อยกเว้นข้างต้นเป็นสาเหตุโดยตรงของข้อยกเว้นต่อไปนี้:

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