import os, sys
from cStringIO import StringIO
import traceback
old_stdErr = sys.stderr
sys.stderr = mystdErr = StringIO()
try:
p = 100/0
except Exception:
traceback.print_exc(file=sys.stderr)
print mystdErr.getvalue() ### -- 1st Print statement
try:
q = 100/0
except Exception:
traceback.print_exc(file = sys.stderr)
print mystdErr.getvalue() ### -- 2nd Print statement
这段代码..输出将是什么
追踪(最近一次通话): 文件“C:\ Users \ manojtut \ Desktop \ untitled-1.py”,第9行,in p = 100/0 ZeroDivisionError:整数除法或模数为零
追踪(最近一次通话): 文件“C:\ Users \ manojtut \ Desktop \ untitled-1.py”,第9行,in p = 100/0 ZeroDivisionError:整数除法或模数为零 Traceback(最近一次调用最后一次): 文件“C:\ Users \ manojtut \ Desktop \ untitled-1.py”,第16行,in q = 100/0 ZeroDivisionError:整数除法或模数为零
正如您所看到的,在第一个zerodivision遇到的异常将在我不想要的第二个打印语句中再次打印。我可以以某种方式消除/清除第一个异常回溯,以便只能在第二个打印语句中打印第二个异常的回溯吗?
答案 0 :(得分:1)
添加:
mystdErr.reset()
mystdErr.truncate()
在第二个街区之前。 reset
将文件位置重置为开头,并从那里开始写入。 truncate
删除当前位置后的所有数据。如果省略'truncate',则将从后续写入中覆盖流中的数据。