You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 17, 2026. It is now read-only.
The retry mechanism clears the __cause__ attribute when re-raising non-retryable exceptions, breaking explicit exception chaining created with raise ... from ....
Steps to reproduce
Use the @retry_async.AsyncRetry decorator
Raise a non-retryable exception with a cause
Catch the exception and try to read or log its cause
In retry_base.py:168, _default_exception_factory() returns (exc_list[-1], None), which causes raise final_exc from None on line 214, explicitly clearing __cause__.
Proposed fix
Preserve the exception's cause attribute:
# Beforereturnexc_list[-1], None# Afterfinal_exc=exc_list[-1]
cause=getattr(final_exc, '__cause__', None)
returnfinal_exc, cause
This maintains exception chains for better debugging and meets developer expectations for exception handling.