pko*_*out 7 amazon-web-services python-3.x aws-lambda
我使用运行时 Python 3.8 将以下代码部署到 AWS Lambda。
\n\ntry:\n raise Exception(\'my exception\')\nexcept Exception as e:\n raise ValueError(\'my exception 2\') from e\nRun Code Online (Sandbox Code Playgroud)\n\n在 CloudWatch 中,我希望看到像这样的异常链:
\n\nTraceback (most recent call last):\n File "/var/task/handler.py", line 2, in <module>\n raise Exception(\'my exception\')\nException: my exception\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File "/var/task/handler.py", line 4, in <module>\n raise ValueError(\'my exception 2\') from e\nValueError: my exception 2\nRun Code Online (Sandbox Code Playgroud)\n\n相反,我只看到 CloudWatch 中报告的第一个异常,如下所示:
\n\n[ERROR] ValueError: my exception 2\nTraceback (most recent call last):\n\xc2\xa0\xc2\xa0File "/var/task/handler.py", line 21, in pevm_import_budget_file\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0raise ValueError(\'my exception 2\') from e\nRun Code Online (Sandbox Code Playgroud)\n\n为什么日志中没有显示direct cause该语句的异常?from
你提到的行为是预期的,我也看到过同样的情况。看来 Lambda 目前不支持链式异常。但是,为了解决这个问题,您可以添加自己的记录器来捕获异常。
例如,使用traceback检索异常堆栈:
import traceback
def lambda_handler(event, context):
try:
try:
raise Exception('my exception')
except Exception as e1:
raise ValueError('my exception 2')
except Exception as e2:
traceback.print_exception(type(e2), value=e2, tb=e2.__traceback__)
return {}
Run Code Online (Sandbox Code Playgroud)
CloudWatch 日志如下所示:
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 6, in lambda_handler
raise Exception('my exception')
Exception: my exception
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 8, in lambda_handler
raise ValueError('my exception 2')
ValueError: my exception 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4992 次 |
| 最近记录: |