这是一个语义问题,但我试图确定在以下情况下抛出的正确错误.
我有一个过程,有时会执行多次.如果在第一次完成之前再执行一次进程,那么我们有线程保护,它会提高DatabaseError
并阻止该进程再次发生.这并没有返回泛型DatabaseError
,而是引发了一个自定义错误,表示原始过程仍然不完整.
是否存在更合适的"按账簿"PEP错误来代替自定义错误?我已经通读了python PEP中关于数据库异常的内容,没有一个对我有影响.
这是一个语义问题,但我试图确定在以下情况下抛出的正确错误.
我有一个过程,有时会执行多次.如果在第一次完成之前再执行一次进程,那么我们有线程保护,它会提高DatabaseError
并阻止该进程再次发生.这并没有返回泛型DatabaseError
,而是引发了一个自定义错误,表示原始过程仍然不完整.
是否存在更合适的"按账簿"PEP错误来代替自定义错误?我已经通读了python PEP中关于数据库异常的内容,没有一个对我有影响.
对于您想要完成的任务,没有PEP错误规范,但是,有一种trait 可以实现类似和更好的效果,它允许您保留错误上下文,同时能够添加其他信息.
在线程内,继续使用相关错误.在线程之外,只需使用threading.excepthook
,您可以在其中附加错误和其他上下文(即:"线程x:引发了SomeException").
例子:
def custom_hook(args):
print(f'Thread {args.thread}: raised {args.exc_type} {args.exc_value}: {args.exc_traceback}')
threading.excepthook = custom_hook
thread = threading.Thread(target=foo)
thread.start()
thread.join()
...
鼓励您在必要时创建自己的自定义异常.重要的是,错误有效地表达了正在发生的事情的上下文,以便更有效地进行调试.
https://docs.python.org/3/library/threading.html#threading.excepthook