不需要的自动类型转换
Unwanted automatic type conversion
以下代码
"""
Gets the error cause from a pipeline execution status.
:param execution_status: is the pipeline execution status.
:type execution_status: dictionary.
:returns: the pipeline execution error cause and the name of the step.
:rtype: dictionary.
"""
def get_error_cause(execution_status):
error_cause = "Unknown"
error_step = "Unknown"
steps = execution_status['Steps']
if steps:
for step in steps:
if 'FailureReason' in step:
print(str(type(step['Name'])))
error_step = step['Name'],
print(str(type(error_step)))
error_cause = step['FailureReason']
break
else:
error_cause = execution_status['FailureReason']
return {
'Step': error_step,
'Cause': error_cause
}
在 AWS Lambda 环境 中执行时,会自动将 str 转换为元组。代码中出现的两个“打印”方法的输出如下:
<class 'str'>
<class 'tuple'>
这导致在将方法返回的字典序列化为 JSON 时,不是将 'Step' 键的值序列化为字符串,而是序列化为列表:
{
"Step": ["ConcatenateColumns"],
"Cause": "AccessDenied"
}
方法的输入是一个JSON反序列化成字典,像这样:
{
"ExecutionID": "some_execution_ID",
"Status": "Failed",
"ElapsedMinutes": 13.0,
"Steps": [{
"Name": "ConcatenateColumns",
"Status": "Failed",
"ElapsedMinutes": 13.0,
"FailureReason": "AccessDenied"
}],
"FailureReason": "Step failure: One or multiple steps failed."
}
这不是自动类型转换,您将 error_step 定义为元组。
去掉行尾的逗号:
error_step = step['Name']
请参阅 python 文档:https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences
以下代码
"""
Gets the error cause from a pipeline execution status.
:param execution_status: is the pipeline execution status.
:type execution_status: dictionary.
:returns: the pipeline execution error cause and the name of the step.
:rtype: dictionary.
"""
def get_error_cause(execution_status):
error_cause = "Unknown"
error_step = "Unknown"
steps = execution_status['Steps']
if steps:
for step in steps:
if 'FailureReason' in step:
print(str(type(step['Name'])))
error_step = step['Name'],
print(str(type(error_step)))
error_cause = step['FailureReason']
break
else:
error_cause = execution_status['FailureReason']
return {
'Step': error_step,
'Cause': error_cause
}
在 AWS Lambda 环境 中执行时,会自动将 str 转换为元组。代码中出现的两个“打印”方法的输出如下:
<class 'str'>
<class 'tuple'>
这导致在将方法返回的字典序列化为 JSON 时,不是将 'Step' 键的值序列化为字符串,而是序列化为列表:
{ "Step": ["ConcatenateColumns"], "Cause": "AccessDenied" }
方法的输入是一个JSON反序列化成字典,像这样:
{
"ExecutionID": "some_execution_ID",
"Status": "Failed",
"ElapsedMinutes": 13.0,
"Steps": [{
"Name": "ConcatenateColumns",
"Status": "Failed",
"ElapsedMinutes": 13.0,
"FailureReason": "AccessDenied"
}],
"FailureReason": "Step failure: One or multiple steps failed."
}
这不是自动类型转换,您将 error_step 定义为元组。 去掉行尾的逗号:
error_step = step['Name']
请参阅 python 文档:https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences