你可以这样做:
import sys
import traceback
def a():
try:
return b();
except:
_, _, tb = sys.exc_info()
print traceback.format_list(traceback.extract_tb(tb)[-1:])[-1]
或者根据需要自行格式化字符串:
import sys
import traceback
def a():
try:
return b();
except:
_, _, tb = sys.exc_info()
filename, lineno, funname, line = traceback.extract_tb(tb)[-1]
print '{}:{}, in {}\n {}'.format(filename, lineno, funname, line)
此函数返回一个包含三个值的元组,这些值提供有关当前正在处理的异常的信息 (...) 如果堆栈上的任何位置都没有处理异常,则返回一个包含三个 None 值的元组。否则,返回的值为(类型、值、回溯)。
返回从回溯对象回溯中提取的最多限制“预处理”堆栈跟踪条目的列表。它对于堆栈跟踪的替代格式很有用。如果省略限制或无,则提取所有条目。“预处理”堆栈跟踪条目是一个四元组(文件名、行号、函数名、文本),表示通常为堆栈跟踪打印的信息。文本是一个去掉了前导和尾随空格的字符串;如果源不可用,则为无。
给定由 extract_tb() 或 extract_stack() 返回的元组列表,返回准备打印的字符串列表。结果列表中的每个字符串对应于参数列表中具有相同索引的项。每个字符串都以换行符结尾;对于源文本行不是 None 的项目,字符串也可能包含内部换行符。