这是一个语义问题,但我试图确定在以下情况下抛出的正确错误.

我有一个过程,有时会执行多次.如果在第一次完成之前再执行一次进程,那么我们有线程保护,它会提高DatabaseError并阻止该进程再次发生.这并没有返回泛型DatabaseError,而是引发了一个自定义错误,表示原始过程仍然不完整.

是否存在更合适的"按账簿"PEP错误来代替自定义错误?我已经通读了python PEP中关于数据库异常的内容,没有一个对我有影响.

https://peps.python.org/pep-0249/#exceptions

推荐答案

Problem

对于您想要完成的任务,没有PEP错误规范,但是,有一种trait 可以实现类似和更好的效果,它允许您保留错误上下文,同时能够添加其他信息.

threading.excepthook

在线程内,继续使用相关错误.在线程之外,只需使用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()

...

Notes

鼓励您在必要时创建自己的自定义异常.重要的是,错误有效地表达了正在发生的事情的上下文,以便更有效地进行调试.

References

https://docs.python.org/3/library/threading.html#threading.excepthook

https://docs.python.org/3/library/sys.html#sys.excepthook

Python相关问答推荐

为什么符号没有按顺序添加?

Python键入协议默认值

无法定位元素错误404

如何在Python脚本中附加一个Google tab(已经打开)

当独立的网络调用不应该互相阻塞时,'

如何在表中添加重复的列?

通过ManyToMany字段与Through在Django Admin中过滤

Pandas:计算中间时间条目的总时间增量

如果包含特定值,则筛选Groupby

在电影中向西北方向对齐""

numpy数组和数组标量之间的不同行为

仅取消堆叠最后三列

如何在Quarto中的标题页之前创建序言页

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

为什么在不先将包作为模块导入的情况下相对导入不起作用

as_index=False groupBy不支持count

如何导入与我试图从该目录之外运行的文件位于同一目录中的Python文件?

通过外键Django创建从一个字段到其他字段的 Select 列表

安装PyTorch时出现CondaVerificationError

有条件的滚动平均数(面试问题)