2010-07-13 2 views
3

Я получаю сообщение об ошибке, как это:Попадая исключения питона распечатаны обычным способом с PyObjC

2010-07-13 20: 43: 15,131 Python [1527: 60f] главный: Caught OC_PythonException:: экземпляр LoginMenuSet не имеет атрибута '' play_sound

Вот с этим кодом:

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

Я хочу, чтобы исключение python печаталось нормально с трассировкой и всем остальным.

спасибо.

ответ

-1

Вот мое решение:

В классе 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__"]]; 
    } 

В питона PyObjC подкласса:

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

Я, курса, импорта модуля отладочные сообщения.

9

Один трюк, чтобы увидеть исключения на Python - позвонить objc.setVerbose(1). Это делает PyObjC немного более подробным и заставляет его печатать трассировки стека Python при преобразовании исключений из Python в Objective-C.

+0

Благодарим вас за этот ответ, но, задав этот вопрос, я в конце концов нашел свое решение. Я забыл ответить на свой вопрос, но я сделаю это ниже. –

+0

Для полноты вы должны сначала «импортировать objc». – reubano