使用PyObjC正常打印Python异常

5 投票
2 回答
662 浏览
提问于 2025-04-16 01:14

我遇到了这样的错误:

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的错误追踪信息。

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模块。

撰写回答