关于python:删除cStringIO.StringIO的已使用部分

Deleting the used part of cStringIO.StringIO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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:usersmanojtutdesktopuntitled-1.py",第9行,inP=100/0零分割错误:整数除以或模除以零

第二个打印语句的输出

回溯(最近一次呼叫的最后一次):文件"C:usersmanojtutdesktopuntitled-1.py",第9行,inP=100/0零分割错误:整数除以或模除以零回溯(最近一次呼叫的最后一次):文件"C:usersmanojtutdesktopuntitled-1.py",第16行,inq=100/0零分割错误:整数除以或模除以零

如您所见,在第1个零除法中遇到的异常将在第二个print语句中再次打印,我不希望这样做。我是否可以以某种方式消除/清除第一个异常的回溯,以便在第二个print语句中只打印第二个异常的回溯?


添加:

1
2
mystdErr.reset()
mystdErr.truncate()

在第二个街区之前。reset将文件位置重置为开始位置,然后从开始写入。truncate删除当前位置后的所有数据。如果省略了"truncate"-流中的数据将被随后的写入操作覆盖。