|
1 |
| -import linecache |
| 1 | +from traceback import print_tb, print_exception |
2 | 2 |
|
3 | 3 |
|
4 | 4 | def print_traceback_and_except(dumpling_result):
|
5 |
| - traceback_obj = dumpling_result["traceback"] |
6 |
| - except_extra = dumpling_result["exc_extra"] |
7 |
| - except_type = except_extra["exc_type"] |
8 |
| - except_value = except_extra["exc_value"] |
9 |
| - |
10 |
| - print("Traceback (most recent call last):") |
11 |
| - while traceback_obj: |
12 |
| - frame = traceback_obj.tb_frame |
13 |
| - lineno = traceback_obj.tb_lineno |
14 |
| - filename = frame.f_code.co_filename |
15 |
| - function_name = frame.f_code.co_name |
16 |
| - line = linecache.getline(filename, lineno).strip() |
17 |
| - mid_index = len(line) // 2 |
18 |
| - |
19 |
| - print(f"File \"{filename}\", line {lineno}, in {function_name}") |
20 |
| - print(f" {line}") |
21 |
| - print(" " * 4 + "~" * mid_index + "^" + "~" * mid_index) |
22 |
| - traceback_obj = traceback_obj.tb_next |
23 |
| - |
24 |
| - if traceback_obj is None: |
25 |
| - break |
26 |
| - print(f"{except_type.__name__}: {except_value}") |
| 5 | + exc_tb = dumpling_result["traceback"] |
| 6 | + except_extra = dumpling_result.get("exc_extra") |
| 7 | + exc_type = except_extra["exc_type"] if except_extra else None |
| 8 | + exc_value = except_extra["exc_value"] if except_extra else None |
| 9 | + if exc_type and exc_value: |
| 10 | + print_exception(exc_type, exc_value, exc_tb) |
| 11 | + else: |
| 12 | + print_tb(exc_tb) |
0 commit comments