你可以做這樣的事情:
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值的元組。否則,返回的值是(type,value,traceback)。
返回高達限制從回溯對象追蹤提取的「預處理」堆棧跟蹤條目的列表。這對堆棧跟蹤的替代格式非常有用。如果限制被忽略或無,所有條目被提取。 「預處理」堆棧跟蹤條目是一個四位(文件名,行號,函數名稱,文本),表示通常爲堆棧跟蹤打印的信息。該文本是一個帶有前導和尾隨空白字符的字符串;如果源不可用,則爲無。
定爲由extract_tb()或extract_stack(返回一個元組列表),返回字符串準備打印的清單。結果列表中的每個字符串對應於參數列表中具有相同索引的項目。每個字符串以換行符結束;對於源文本行不是None的項目,字符串也可以包含內部換行符。
嘗試了第一個例子,結果很好。 – user984003