删除cStringIO.StringIO的已使用部分

时间:2012-06-28 09:16:10

标签: python string exception

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遇到的异常将在我不想要的第二个打印语句中再次打印。我可以以某种方式消除/清除第一个异常回溯,以便只能在第二个打印语句中打印第二个异常的回溯吗?

1 个答案:

答案 0 :(得分:1)

添加:

mystdErr.reset()
mystdErr.truncate()

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