1
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 行,在 p = 100/0 ZeroDivisionError:整数除法或模除以零

第二个打印语句的输出

Traceback(最近一次调用最后一次):文件“C:\Users\manojtut\Desktop\untitled-1.py”,第 9 行,在 p = 100/0 ZeroDivisionError:整数除法或模除以零 Traceback(最近一次调用最后一次) :文件“C:\Users\manojtut\Desktop\untitled-1.py”,第 16 行,在 q = 100/0 ZeroDivisionError:整数除法或模除以零

如您所见,在第一个 zerodivision 遇到的异常正在我不想要的第二个 print 语句中再次打印。我可以以某种方式消除/清除第一个异常回溯,以便只能在第二个打印语句中打印第二个异常的回溯吗?

4

1 回答 1

1

添加这个:

mystdErr.reset()
mystdErr.truncate()

在第二块之前。reset将文件位置重置为开头并从那里开始写入。truncate删除当前位置之后的所有数据。如果省略 'truncate' - 流中的数据将被后续写入覆盖。

于 2012-06-28T09:47:33.303 回答