Nền tảng của tôi là về C # và tôi mới bắt đầu lập trình bằng Python. Khi một ngoại lệ được ném, tôi thường muốn bọc nó trong một ngoại lệ khác để thêm thông tin, trong khi vẫn hiển thị dấu vết ngăn xếp đầy đủ. Nó khá dễ dàng trong C #, nhưng làm thế nào để tôi làm điều đó trong Python?
Ví dụ. trong C # tôi sẽ làm một cái gì đó như thế này:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
Trong Python tôi có thể làm một cái gì đó tương tự:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... nhưng điều này làm mất đi dấu vết của ngoại lệ bên trong!
Chỉnh sửa: Tôi muốn xem cả tin nhắn ngoại lệ và cả dấu vết ngăn xếp và tương quan cả hai. Đó là, tôi muốn thấy trong đầu ra ngoại lệ X xảy ra ở đây và sau đó ngoại lệ Y ở đó - giống như tôi đã làm trong C #. Điều này có thể có trong Python 2.6 không? Có vẻ như điều tốt nhất tôi có thể làm cho đến nay (dựa trên câu trả lời của Glenn Maynard) là:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
Điều này bao gồm cả tin nhắn và cả tracebacks, nhưng nó không hiển thị ngoại lệ nào xảy ra ở nơi truy xuất.