Search code examples
pythonobjective-cexceptionpyobjc

Getting python exceptions printed the normal way with PyObjC


I'm getting errors like this:

2010-07-13 20:43:15.131 Python[1527:60f] main: Caught OC_PythonException: : LoginMenuSet instance has no attribute 'play_sound'

That's with this code:

@try {
    [section loop]; //Loop through section
} @catch (NSException *exception) {
    NSLog(@"Caught %@: %@", [exception name], [exception reason]);
}

I want the python exception to be printed normally with the traceback and everything else.

Thank you.


Solution

  • Here's my own solution:

    In Objective-C class:

    @try {
            [section loop]; //Loop through section
        } @catch (NSException *exception) {
            NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);
            [self exception: [[exception userInfo] valueForKey: @"__pyobjc_exc_traceback__"]];
        }
    

    In python pyobjc subclass:

    def exception_(self,trace):
            traceback.print_tb(trace)
            NSApplication.sharedApplication().terminate_(None) #Accept no errors
    

    I, of-course, imported the traceback module.