首页 文章

删除cStringIO.StringIO的已使用部分

提问于
浏览
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:整数除法或模数为零

第二个打印语句的输出

回溯(最近一次调用最后一次):文件“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遇到的异常将在我不想要的第二个打印语句中再次打印 . 我可以以某种方式消除/清除第一个异常回溯,以便只能在第二个打印语句中打印第二个异常的回溯吗?

1 回答

  • 1

    添加这个:

    mystdErr.reset()
    mystdErr.truncate()
    

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

相关问题