关于python:使用try except时递归输出异常详细信息

Print exception details recursively while using try except

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python

#import re


def test_ex1(input):
    if re.match(r'^[A-Z]+$',input):
        print 'Match'
        return True
    print 'No Match'
    return False  


#test_ex1('ABC')
try:
    test_ex1('ABC')
except Exception:
    raise Exception

如果我运行上述程序,它将打印以下异常消息。

1
2
3
4
5
a:~/Python> python test.py
Traceback (most recent call last):
  File"test.py", line 18, in <module>
    raise Exception
Exception

在使用try except而不更改test_ex1子例程捕获异常的情况下,让它打印以下堆栈跟踪的正确方法是什么?

1
2
3
4
5
6
Traceback (most recent call last):
  File"test.py", line 15, in <module>
    test_ex1('ABC')
  File"test.py", line 8, in test_ex1
    if re.match(r'^[A-Z]+$',input):
NameError: global name 're' is not defined


一种方法是使用traceback模块

1
2
3
4
5
6
import traceback

try:
  re.match()
except Exception:
  traceback.print_exc()


我曾经用以下方法将所有的回溯打印为:

1
2
3
4
5
6
import sys

try:
    # code here
except Exception:
    print(sys.exc_info()[0])

使用raise关键字将错误抛到堆栈中,并在函数调用的上层处理。