【问题标题】:Getting python exceptions printed the normal way with PyObjC使用 PyObjC 以正常方式打印 python 异常
【发布时间】:2010-07-13 19:46:29
【问题描述】:

我收到这样的错误:

2010-07-13 20:43:15.131 Python [1527:60f] 主要:抓到 OC_PythonException: : LoginMenuSet 实例没有属性 'play_sound'

代码如下:

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

我希望 python 异常与回溯和其他所有内容一起正常打印。

谢谢。

【问题讨论】:

    标签: python objective-c exception exception-handling pyobjc


    【解决方案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__"]];
        }
    

    在python pyobjc 子类中:

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

    当然,我导入了 traceback 模块。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回答,但自从提出这个问题后,我最终确实找到了自己的解决方案。我忘了回答我自己的问题,但我会在下面回答。
      • 为了完整起见,您必须先import objc
      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2015-05-04
      相关资源
      最近更新 更多