IronPython 异常的其余部分在哪里?

问题描述 投票:0回答:2

我可能是错的,但是当 IronPython 中引发

SystemError
时,我似乎只得到不完整的堆栈跟踪和异常消息。我正在这样做:

try:
    with SQLConnection(DATASOURCES[SCHEDULEDB]) as db:
        db.execute_sql( command + ' ' + ','.join(block) + ';' )
except Exception, e:
    print 'caught an exception'
    print "Unexpected error:", sys.exc_info()[0]
    print e
    raise
finally:
    db.close()
    engine.close()

然而,我看到的只是这样:

Traceback (most recent call last):
SystemError: The connection has been disabled.
python exception ironpython
2个回答
7
投票

尝试:

import traceback
traceback.print_exc()

而不是直接打印异常对象。在 Python 中,异常对象不直接保留堆栈跟踪 - 相反,它们是 sys.exc_info() 中三项的一部分。

你也可以这样做:

import System
...

except System.Exception, e:

您将得到一个普通的 .NET 异常对象,而不是 Python 异常对象。


1
投票

IronPython 进程上有一些标志将设置 .NET 异常以转储其堆栈跟踪:

ipy -X:ShowClrExceptions -X:ExceptionDetail my_script.py args
© www.soinside.com 2019 - 2024. All rights reserved.