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

Error logging doesn't support chained exceptions.

Abierto
#25 1 comentario 6 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
294
Forks
84
Merge medio
3 d 7 min
PR fusionados (30 d)
3

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.