локальная переменная ‘type’, на которую ссылаются перед назначением

#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