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

Error logging doesn't support chained exceptions.

Offen
#25 1 Kommentar 6 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
294
Forks
84
Ø Merge
3 T. 7 Min.
Gemergte PRs (30 T.)
3

Beschreibung

The [bootstrap.py](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py) wrapper's error logging doesn't correctly handle chained exceptions (see [PEP-3134](https://www.python.org/dev/peps/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`).

```python
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
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
raise Exception("second!") from e
Exception: second!
```

It includes:
* first exception's message and stacktrace followed by
* `The above exception was the direct cause of the following exception:`, followed by
* second exception's message and stacktrace

### 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
    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
    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
raise Exception("first!")
...
```

Code that is responsible for logging exceptions is [here](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/c1c9b2954e5fa3a952be906f32c8e91df8476108/awslambdaric/bootstrap.py#L110).

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.