Matthew Mitchell
Matthew Mitchell

Reputation: 5393

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.

Upvotes: 5

Views: 685

Answers (2)

Matthew Mitchell
Matthew Mitchell

Reputation: 5393

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.

Upvotes: 0

Ronald Oussoren
Ronald Oussoren

Reputation: 2810

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.

Upvotes: 9

Related Questions