用PyObjC正常打印Python异常信息

5
我遇到了以下这样的错误:

2010-07-13 20:43:15.131 Python[1527:60f] main: 捕获了OC_PythonException异常: LoginMenuSet实例没有属性'play_sound'

这是由于下面这段代码引起的:
@try {
    [section loop]; //Loop through section
} @catch (NSException *exception) {
    NSLog(@"Caught %@: %@", [exception name], [exception reason]);
}

我希望能正常打印Python异常,包含追踪和其他信息。
谢谢。
2个回答

9

查看Python异常的一个技巧是调用objc.setVerbose(1)。这会使PyObjC稍微冗长一些,并在将异常从Python转换为Objective-C时打印Python堆栈跟踪。


1
谢谢您的回答,但自从我提出这个问题后,我最终找到了自己的解决方案。我忘记回答自己的问题了,但我会在下面回答。 - Matthew Mitchell
为了完整性,您必须先import objc - reubano

0
这是我的解决方案:
在Objective-C类中:
@try {
        [section loop]; //Loop through section
    } @catch (NSException *exception) {
        NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);
        [self exception: [[exception userInfo] valueForKey: @"__pyobjc_exc_traceback__"]];
    }

在Python的pyobjc子类中:
def exception_(self,trace):
        traceback.print_tb(trace)
        NSApplication.sharedApplication().terminate_(None) #Accept no errors

当然,我导入了 traceback 模块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接