#python-3.x #odoo #odoo-13
#python-3.x #odoo #odoo-13
Вопрос:
Почему я получаю эту ошибку?
локальная переменная ‘type’, на которую ссылаются перед назначением
Код:
try:
if type(meeting.modified_date) != bool:
//code
except Exception as e:
raise ValidationError(_(str(e)))
finally:
type = None
if 1:
type = 'auto'
else:
type = 'manual'
Я думал, что какая-то локальная переменная создает эту ошибку, но после отладки я узнал, что это if
условие создает ошибку из-за этого type()
.
Комментарии:
1. Существует ли также переменная типа в той же функции или, может быть, даже в классе, тогда она будет рассматриваться как локальная переменная, а не как глобальная
2. Нет @Paxmees такой переменной в методе in нет
Ответ №1:
Пустые значения атрибутов записи в наборах записей Odoo всегда будут ложными, за исключением числовых полей, таких как float или integer . Они будут иметь нулевое значение, и это также неверно, но нулевые значения могут иметь значение в некоторых контекстах, поэтому вы всегда должны думать об условиях if при проверке числовых значений.
В любом случае, вы можете просто изменить свое условие if на
if meeting.modified_date:
, потому что поля даты, не заданные, являются ложными, а поля даты, заданные, являются правдивыми.
Комментарии:
1. Вы правы, но почему python не смог провести различие между переменной и методом.
2. трудно сказать, не видя кода вообще :-/
Ответ №2:
Один из способов получить эту ошибку.
def _something(self, meeting):
if type(meeting.modified_date) != bool:
pass
#rename it
type = "small"
Редактировать:
try:
if type(meeting.modified_date) != bool:
//code
except Exception as e:
raise ValidationError(_(str(e)))
finally:
#this is local variable and the fix is
record_type = None
if 1:
record_type = 'auto'
else:
record_type = 'manual'
#and later where type is used it should renamed aswell