【问题标题】:how to indent stack trace in python?如何在python中缩进堆栈跟踪?
【发布时间】:2012-02-09 00:59:33
【问题描述】:

环境 - win7 机器上的 Python 2.7.2。 我的技能水平 - 菜鸟

我正在使用以下内容来捕获和打印异常堆栈跟踪 -

def logerr(stmt, e):
try:
    ##do something

except:
    print '##EXCEPTION in logging: '
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stdout)

输出是 -

##EXCEPTION in logging: 
Traceback (most recent call last):
  File "C:\Users\amurty\Desktop\dev\eclipse\workspace\hhs\FeedSearch\src\main\main.py", line 18, in main
    log()
TypeError: log() takes exactly 1 argument (0 given)

我想缩进堆栈跟踪。所以输出应该是这样的 -

##EXCEPTION in logging: 
        Traceback (most recent call last):
          File "C:\Users\amurty\Desktop\dev\eclipse\workspace\hhs\FeedSearch\src\main\main.py", line 18, in main
            log()
        TypeError: log() takes exactly 1 argument (0 given)

我怎样才能做到这一点。 pprint 或 textwrap 模块在这里有帮助吗?

【问题讨论】:

    标签: python exception exception-handling python-2.7


    【解决方案1】:

    试试这个:

    import traceback
    
    def logerr(stmt, e):
        try:
            ##do something
    
        except:
            print '##EXCEPTION in logging: '
            for line in traceback.format_exception().splitlines():
                print '        ' + line
    

    【讨论】:

    • 太棒了。我不得不稍微调整一下代码并使用正则表达式(拆分线引发错误-AttributeError:'list'对象没有属性'splitlines')这对我有用-除了: print getLogStamp() + '--EXCEPTION-- ' + stmt + ' - ' + str(e) exc_type, exc_value, exc_traceback = sys.exc_info() for line in traceback.format_exception(exc_type, exc_value, exc_traceback): line = regex.sub('', line.strip()) print '\t\t' + str(line).rstrip('\n') 警告 - 这会破坏由回溯引起的跟踪格式,如阶梯式制表符。
    • 我仍在学习如何使用 stackoverflow。抱歉所有的编辑和格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2014-12-24
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多