def log_python_exception(exception): userInfo = exception.userInfo() try: tb = userInfo['__pyobjc_exc_traceback__'] except KeyError: tb = userInfo['__pyobjc_exc_value__'].__traceback__ log.error('Python exception discarded\n' + ''.join(traceback.format_exception( userInfo['__pyobjc_exc_type__'], userInfo['__pyobjc_exc_value__'], tb))) if tb is None and NSStackTraceKey in userInfo: return log_objc_exception(exception) # we logged it, so don't log it for us return False
def unexpected_error(): """error handler function for objc.AppHelper.runEventLoop""" root_log.error("unexpected error", exc_info=True) return True
def log_objc_exception(exception): stack = get_objc_traceback(exception) stack = "\n{}".format(stack) if stack else "" log.error("ObjC exception discarded: %s: %s%s", exception.name(), exception.reason(), stack) return False # tell pyobjc not to log exception