Tôi đã có một đoạn mã tương tự như sau:Exception traceback bị ẩn nếu không tái huy động ngay lập tức
import sys
def func1():
func2()
def func2():
raise Exception('test error')
def main():
err = None
try:
func1()
except:
err = sys.exc_info()[1]
pass
# some extra processing, involving checking err details (if err is not None)
# need to re-raise err so caller can do its own handling
if err:
raise err
if __name__ == '__main__':
main()
Khi func2
đặt ra một ngoại lệ tôi nhận được traceback sau:
Traceback (most recent call last):
File "err_test.py", line 25, in <module>
main()
File "err_test.py", line 22, in main
raise err
Exception: test error
Từ đây tôi không thấy nơi mà ngoại lệ đến từ đâu. Traceback gốc bị mất.
Làm cách nào tôi có thể giữ nguyên lượt truy nguyên gốc và tăng lại nó? Tôi muốn nhìn thấy một cái gì đó tương tự như sau:
Traceback (most recent call last):
File "err_test.py", line 26, in <module>
main()
File "err_test.py", line 13, in main
func1()
File "err_test.py", line 4, in func1
func2()
File "err_test.py", line 7, in func2
raise Exception('test error')
Exception: test error
Đáng nói rằng điều này không hoạt động trong Python 3. – yprez
"Điều này" trong nhận xét của yprez có nghĩa là "tăng trống sau khi rời khỏi khối ngoại trừ". Các "nâng cao" trần không hoạt động trong Python 3 (nhưng chỉ bên trong khối ngoại trừ.) – jtniehof