Is there an appropriate PEP error for failed threaded process?

Viewed 34

This is a semantics question, but I'm trying to determine the correct Error to throw in the following situation.

I have a process that sometimes is performed multiple times. If the process is performed an additional time before the first time is complete, we have thread protection that raises a DatabaseError and blocks the process from occurring a second time. Instead of returning the generic DatabaseError, this raises a custom error that says that the original process is still incomplete.

In lieu of the custom error, is there a "by the books" PEP error that would be more appropriate? I've read through the python PEP for database exceptions and none stuck out to me.

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

1 Answers

Problem

There is no PEP Error specification for what you would like to accomplish, however, there is an idiosyncrasy that will achieve the similar—and better—effect, which allows one to retain error context while being able to add additional information.

threading.excepthook

Within the thread, continue to use a relevant error. Outside of the thread, just use a threading.excepthook, where you can affix your error with additional context (ie: "Thread x: raised SomeException").

Example:

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

It is encouraged to create your own custom Exceptions where necessary. What's important is that the Error effectively expresses the context of what is happening to allow for debugging more efficiently.

References

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

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

Related