พื้นหลังของฉันอยู่ใน C # และฉันเพิ่งเพิ่งเริ่มเขียนโปรแกรมใน Python เมื่อมีข้อผิดพลาดเกิดขึ้นฉันมักต้องการล้อมรอบด้วยข้อยกเว้นอื่นที่เพิ่มข้อมูลเพิ่มเติมขณะที่ยังคงแสดงการติดตามสแต็กเต็ม มันค่อนข้างง่ายใน C # แต่ฉันจะทำใน Python ได้อย่างไร
เช่น. ใน C # ฉันจะทำสิ่งนี้:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
ใน Python ฉันสามารถทำสิ่งที่คล้ายกัน:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... แต่สิ่งนี้จะสูญเสียการย้อนกลับของข้อยกเว้นภายใน!
แก้ไข:ฉันต้องการเห็นทั้งข้อความข้อยกเว้นและทั้งร่องรอยสแต็กและสัมพันธ์กันทั้งสอง นั่นคือฉันต้องการที่จะเห็นในผลลัพธ์ที่ข้อยกเว้น X เกิดขึ้นที่นี่และจากนั้นยกเว้น Y มี - เช่นเดียวกับฉันใน C # เป็นไปได้ใน Python 2.6 หรือไม่ ดูเหมือนว่าดีที่สุดที่ฉันสามารถทำได้ (ตามคำตอบของ Glenn Maynard) คือ:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
ซึ่งรวมถึงข้อความและทั้งสองการสืบค้นกลับ แต่ไม่แสดงข้อยกเว้นใดที่เกิดขึ้นในการติดตามกลับ