#python #django
#python #django
Вопрос:
Я просмотрел код Django для IntegerField
to_python
метода ‘s. Часть преобразования типа
try:
value = int(str(value))
except (ValueError, TypeError):
raise ValidationError(self.error_messages['invalid'], code='invalid')
Код преобразует value
(введите unicode) в str
first и then int
. Почему он не может быть приведен int
непосредственно, т.е.
try:
value = int(value)
except...
Комментарии:
1. Потому
value
что может быть объектом, а не просто строковым литералом. Вызовstr
вызовет его строковое представление, а не егоrepr
. Кроме того, рассмотрите «Явное лучше, чем неявное» из the Zen of Python.2. Объект в Python естественным образом представляется как мусор. Он будет отображаться как что-то вроде <экземпляр myfile.object в 0x38DF32> . Это не может быть преобразовано в целое число. Объекты, представляющие числа, чаще всего имеют обработчики, такие как __ unicode __ или переопределенный repr, которые возвращают представление этого объекта. Обычно они печатаются как более разумное значение, например, истинное значение объекта (надеюсь, число). Конечно, это не всегда так, но значение str() объекта обычно дает что-то более близкое к истинному значению объекта. Это трудно объяснить, я надеюсь, это поможет!