Я обнаружил, что инструкции python, которые не входят в основную функцию, но находятся в глобальной области видимости, запускаются только один раз, после того, как функция создана / обновлена (и, возможно, после замены контейнера, но не проверила ее), что вызывает не то же самое поведение функции сначала и все последующие запуски. Тестовый код:
assets = []
print "======0. should be [] ========"
print(assets)
def lambda_handler(event, context):
global assets
print "======l. should be [] ========"
print(assets)
assets.append({
"key": "val"
})
print "======2. should be [{'key': 'val'}] ========"
print(assets)
assets = {"data":assets}
print "======3. should be {'data': [{'key': 'val'}]} ========"
print(assets)
Когда я запускаю функцию в самый первый раз (или после того, как я обновил ее), у меня есть:
======0. should be [] ========
[]
START RequestId: ecdf063e-51f0-11e8-9783-7f18ff8ee142 Version: $LATEST
======l. should be [] ========
[]
======2. should be [{'key': 'val'}] ========
[{'key': 'val'}]
======3. should be {'data': [{'key': 'val'}]} ========
{'data': [{'key': 'val'}]}
END RequestId: ecdf063e-51f0-11e8-9783-7f18ff8ee142
Это то, что я ожидаю, несмотря на то, что я запутался, почему вывод начался до «START».
Проблема заключается в следующем: при следующем запуске assets
переменная уже имеет старое значение:
START RequestId: 66999707-51f1-11e8-b21a-9963eeb4aa56 Version: $LATEST
======l. should be [] ========
{'data': [{'key': 'val'}]}
'dict' object has no attribute 'append': AttributeError
Traceback (most recent call last):
File "/var/task/test.py", line 11, in lambda_handler
assets.append({
AttributeError: 'dict' object has no attribute 'append'
END RequestId: 66999707-51f1-11e8-b21a-9963eeb4aa56
Как вы можете видеть, вывод ======0. should be [] ========
отсутствует, а переменная уже имеет значение.
Я не гуру Python, поэтому я делаю что-то не так или это ошибка?