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

4 投票
2 回答
1643 浏览
提问于 2025-04-16 13:27

我可能理解错了,但我发现当在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.

2 个回答

1

在IronPython这个程序中,有一些标志可以让.NET的错误信息在出现时显示它们的调用堆栈。

ipy -X:ShowClrExceptions -X:ExceptionDetail my_script.py args
7

试试这个:

import traceback
traceback.print_exc()

不要直接打印异常对象。在Python中,异常对象并不会直接保存错误发生时的调用记录,而是和其他两个信息一起存在于sys.exc_info()中。

你也可以这样做:

import System
...

except System.Exception, e:

这样你就会得到一个普通的.NET异常对象,而不是Python的异常对象。

撰写回答