Django ValueError invalid literal for int() with base 10: ' как я могу решить ошибку типа None

В Django формах, когда я добавляю значения, из поля old_car получаю ValueError invalid literal for int() with base 10: ''

значения new_car и old_car являются строковыми и должны быть преобразованы в целое число для дальнейших условий, я знаю, что если я удалю int, это решит ошибку :).

как я могу решить эту проблему

django forms.py

 car = cleaned_data.get("user", ['AUTO'])
        if car[0] == 'AUTO':
            records = []
            for i in range(count):
                new_car = int(self.data.get(f'cardefination_set-{i}-new_car', []))
                old_car =int(self.data.get(f'cardefination_set-{i}-old_car', []))
                records.append((new_car, old_car))
            records = sorted(records, key=lambda record: record[1])

trcae back

https://stackoverflow.com/posts/72548081/edit#

Не зная больше о вашем коде, я рассмотрю пару вопросов, связанных с этими строками:

#...
new_car = int(self.data.get(f'cardefination_set-{i}-new_car', []))
old_car =int(self.data.get(f'cardefination_set-{i}-old_car', []))
#...

Проблема одинакова в обеих строках. Вы casting (явное приведение типа) значение в int с помощью int(value). Это означает, что значение должно быть "конвертируемым" в int. В вашем случае вы получаете значение из self.data, которое, как я предполагаю, является словарем. Если полученное значение не может быть преобразовано в int, вы получите эту ошибку.

Более того, я вижу, что вы используете параметр значения по умолчанию в функции dict.get(key, value).

get(key[, default])

Возвращает значение для ключа, если ключ находится в словаре, в противном случае - значение по умолчанию. Если значение default не задано, оно по умолчанию равно None, так что этот метод никогда не вызовет ошибку KeyError.

.

По умолчанию вы предоставляете значение [], которое является list, т.е. int([]) выбросит:

TypeError: аргумент int() должен быть строкой, байтоподобным объектом или вещественным числом, а не 'list'

Эта ошибка не является ошибкой, о которой вы упоминаете, но просто хотел указать на это.

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

Отсюда ваша ошибка:

ValueError invalid literal for int() with base 10: ''

Убедитесь, что то, что вы получаете из диктанта, можно преобразовать в int

Вернуться на верх