当前位置: 首页 > 面试题库 >

每次引发异常时调用钩子函数

谢财
2023-03-14
问题内容

假设我希望能够在程序中任何地方每次引发异常时都能够记录到文件。我不想修改任何现有代码。

当然,可以将其概括为每次引发异常时都可以插入钩子。

以下代码是否被认为可以安全地执行此操作?

class MyException(Exception):

    def my_hook(self):
        print('---> my_hook() was called');

    def __init__(self, *args, **kwargs):
        global BackupException;
        self.my_hook();
        return BackupException.__init__(self, *args, **kwargs);


def main():
    global BackupException;
    global Exception;

    BackupException = Exception;
    Exception = MyException;

    raise Exception('Contrived Exception');


if __name__ == '__main__':
    main();

问题答案:

如果要记录 未捕获的
异常,只需使用sys.excepthook即可。

我不确定是否会记录 所有 引发的异常的价值,因为很多库会在内部为可能不关心的事情引发/捕获异常。



 类似资料:
  • 我有以下错误 ValidationException:HV000041:调用TraversableResolver.IsReachable()引发异常。在org.hibernate.validator.internal.engine.validatorimpl.isreachable(validatorimpl.java:1405)上 org.hibernate.validator.interna

  • 我有一个与: 以及我的带有useReducer钩子的提供者上下文。以及一个useEffect钩子,用于调度操作“setCurrentUser”,并在客户端登录时将“isAuthenticated”设置为true。 我放了一个控制台。在我的组件中记录(stateUser.isAuthenticated),这将显示“false”(初始值),然后显示“true”(分派) 我需要将状态(stateUser

  • 在调度器钩子中打印线程切换信息 在调度器钩子中打印线程切换信息 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the first v

  • 我试图在grails域对象上执行sql语句。当直接在db(h2)上执行时,is工作正常。 通过hibernate,我得到: 没有节点的数据类型:org.hibernate.hql.internal.ast.tree.MethodNode-[METHOD_CALL]MethodNode:'('-[METHOD_NAME]IdentNode:'to_char'{originalText=to_char

  • 问题内容: 我有一个简单的方法,可将命令打印到屏幕上,扫描用户的输入,然后将其作为字符串返回。如果用户输入无效,它将通知用户并再次询问。该方法运行完美,但是我的讲师提到我们应该始终关闭资源,因此我回过头来添加了close方法,现在无论用户输入什么,每次调用该方法时都会收到NoSuchElementException。这是代码… 例外总是指向用户输入以scan.nextLine()。trim()开头

  • 这是一个windows表单应用程序,我在其中有一个特定的表单。在这个表单上,我显示了一些应该在后台异步发生的处理的进度。所有这些都很好,除了当我尝试处理后台处理中捕获的异常时…… 这是表单代码中调用Async函数的子函数,该函数位于包含所有后台处理代码的模块中: 这是它调用的异步函数,它位于一个单独的模块中: 这是由异步函数调用的常规sub: 当我使用我知道最终会在子B中生成错误的数据运行此代码时