其余的铁血运动异常在哪里?

时间:2011-03-10 20:26:35

标签: python exception-handling ironpython

我可能错了,但在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 个答案:

答案 0 :(得分:7)

尝试:

import traceback
traceback.print_exc()

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

你也可以这样做:

import System
...

except System.Exception, e:

并且您将获得一个普通的.NET异常对象而不是Python异常对象。

答案 1 :(得分:0)

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

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