使用PyObjC以正常方式打印python异常

Mat*_*ell 4 python pyobjc exception-handling exception objective-c

我收到这样的错误:

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]);
}
Run Code Online (Sandbox Code Playgroud)

我想通过回溯和其他一切正常打印python异常.

谢谢.

Ron*_*ren 9

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


Mat*_*ell 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__"]];
    }
Run Code Online (Sandbox Code Playgroud)

在 python pyobjc 子类中:

def exception_(self,trace):
        traceback.print_tb(trace)
        NSApplication.sharedApplication().terminate_(None) #Accept no errors
Run Code Online (Sandbox Code Playgroud)

当然,我导入了回溯模块。