aws / aws-lambda-python-runtime-interface-client

Apache License 2.0
261 stars 74 forks source link

Error logging doesn't support chained exceptions. #25

Open pimlock opened 3 years ago

pimlock commented 3 years ago

The bootstrap.py wrapper's error logging doesn't correctly handle chained exceptions (see PEP-3134)

Example

Here's a simple example of code that uses chained exceptions. In that case, when the second exception is thrown, it will have a reference to the first exception stored in __cause__ field (basically, it's doing something like e2.__cause__ = e).

try:
    raise Exception("first!")
except Exception as e:
    raise Exception("second!") from e

When this code is executed, the error is printed like this.

Traceback (most recent call last):
  File "/Users/piotr/dev/bazel-fun/python/src/logging_with_cause/test.py", line 83, in <module>
    raise Exception("first!")
Exception: first!

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/piotr/dev/bazel-fun/python/src/logging_with_cause/test.py", line 85, in <module>
    raise Exception("second!") from e
Exception: second!

It includes:

Issue

When a chained exception is thrown inside Lambda however, it only prints second exception:

[ERROR] Exception: second!
Traceback (most recent call last):
  File "/Users/piotr/dev/bazel-fun/python/src/logging_with_cause/test.py", line 81, in <module>
    raise Exception("second!") from e

Expected result

The whole chain should be printed. Note - the chain can contain any number of exceptions, not only 2.

One option could be:

[ERROR] Exception: second!
Traceback (most recent call last):
  File "/Users/piotr/dev/bazel-fun/python/src/logging_with_cause/test.py", line 81, in <module>
    raise Exception("second!") from e

Caused by: Exception: first!
Traceback (most recent call last):
  File "/Users/piotr/dev/bazel-fun/python/src/logging_with_cause/test.py", line 83, in <module>
    raise Exception("first!")
...

Code that is responsible for logging exceptions is here.

Shauryadhaka commented 1 year ago

any update on this?