Как принять значение с плавающей запятой в качестве ввода в AWS лямбда? - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь передать значение с плавающей запятой в AWS лямбда как ключ, пара значений в событии и для этого я делаю

from decimal import Decimal
ENERGY_VERBRAUCH = event['energy_verbrauch']
ENERGY_VERBRAUCH = Decimal(str(ENERGY_VERBRAUCH))

и моя пара ключ, значение в событии

"energy_verbrauch": "2500000"

Но я получаю следующую ошибку:

START RequestId: e2179e21-f225-44a1-bb99-266b184bc4e2 Version: $LATEST
unsupported operand type(s) for /: 'decimal.Decimal' and 'float'
END RequestId: e2179e21-f225-44a1-bb99-266b184bc4e2

и журнал:

enter image description here

Я посмотрел на уже существующий вопрос о SO и последовал за этим, но все же я получаю сообщение об ошибке.

Вопрос: Десятичное число на входе JSON до Python 3 Лямбда-функция

Затем ENERGY_VERBRAUCH передается функции

def factorize(energy_needed, df):
    '''For scaling the Lastprofile on energy verbrauch'''
    factor = energy_needed/(df['values'].sum()/1000)
    df['values'] = (df['values']/1000)*factor
    df['values'] = df['values'].round(3)
    return df

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Как говорится в сообщении об ошибке, Decimal значения не поддерживают деление со значениями float.

мой ключ, пара значений в событии

"energy_verbrauch": "2500000"

Это целочисленное значение. В этом случае использование Decimal кажется ненужным.

Вы можете просто изменить

from decimal import Decimal
ENERGY_VERBRAUCH = event['energy_verbrauch']
ENERGY_VERBRAUCH = Decimal(str(ENERGY_VERBRAUCH))

на

ENERGY_VERBRAUCH = int(event['energy_verbrauch'])

(Вы также не делаете необходимо использовать str, поскольку значение уже является строкой.)

Тогда деление будет между int и float, что разрешено и приведет к другому float.

0 голосов
/ 08 апреля 2020

Полагаю, energy_needed - это десятичное число, которое вы передаете в своем методе

В этой строке вы делите десятичное число на число с плавающей точкой.

factor = energy_needed/(df['values'].sum()/1000)

Вы необходимо преобразовать его в десятичное число

factor = energy_needed/Decimal(df['values'].sum()/1000)

Теперь коэффициент равен Decimal, и вам нужно будет продолжать преобразовывать другие операнды при использовании его в операции.

...