BaseSubprocessTransport can raise in __del__
Tinche opened this issue · 1 comments
What's our policy on raising exceptions in destructors?
For example, this code:
asyncio/asyncio/base_subprocess.py
Line 131 in ab113e4
Shouldn't this be wrapped in a try/except, and the exception just logged, not propagated? We generally can't know when a destructor will be triggered.
I can put together a small pull request if that's ok.
An exception which raises outside a destructor is printed to stderr ("Exception ignored in:"...).
In this case, while it's probably not easy to understand the source of the exception, I think it's better to let the exception be printed: it tells that the object should have ben closed explicitly before being destroyed. It also tells that this must be done while the loop to which the object is bound is still ready in order to be able to correctly close the object.
However, if you see "Exception ignored in:" without more details, it's probably an exception in the repr method of the object, and this one should be fixed because it silences the actual exception.