5

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.

Matthew Mitchell
  • 5,293
  • 14
  • 70
  • 122

2 Answers2

9

One trick to see Python exceptions is to call objc.setVerbose(1). This makes PyObjC slightly more verbose and causes it to print Python stack traces when converting exceptions from Python to Objective-C.

Ronald Oussoren
  • 2,715
  • 20
  • 29
0

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.

Matthew Mitchell
  • 5,293
  • 14
  • 70
  • 122