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

Error logging doesn't support chained exceptions.

Ouverte
#25 1 commentaire 6 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
294
Forks
84
Merge moyen
3 j 7 min
PR mergées (30 j)
3

Description

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).

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.