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