Мой класс просто:Почему я должен получать python UnboundLocalError при вызове super()?
from openerp import tools
from openerp.osv import osv, fields
import requests
import logging
import json
_logger = logging.getLogger(__name__)
class stock_move(osv.Model):
_inherit = 'stock.move'
def create(self, cr, uid, vals, context=None):
new_id = super(stock_move, self).create(cr, uid, vals, context=context)
Но когда я запускаю его, я получаю это:
File "/opt/odoo/ebuynow/ebn_oddjobs/models.py", line 15, in create
new_id = super(stock_move, self).create(cr, uid, vals, context=context)
UnboundLocalError: local variable 'stock_move' referenced before assignment
Я уверен, что это правильный способ использовать супер(), так как это код работал отлично в другой системе. Этот вопрос больше спрашивает, есть ли там кто-нибудь, кто знает, что это может быть в системе или среде python, которые могут привести к тому, что он не будет распознавать значение share_move как имя класса для вызова метода create() родительского класса.
Система ubuntu server 14.04, python 2.7.6. Предыдущей системой, на которой работал код, был Ubuntu desktop 14.04, также работающий с python 2.7.6.
Я просто не вижу причин, почему это произойдет. Почему python считает, что share_move является локальной переменной?
Edit:
После изменения имени класса, я получаю это:
new_id = super(stock_move_too, self).create(cr, uid, vals, context=context)
UnboundLocalError: local variable 'stock_move' referenced before assignment
stock_move даже вообще не используется, а ошибка все еще показывает ??
Edit2:
Проблема была вызвана odoo-сервер на самом деле не выключая, когда я выпустил команду «Судо /etc/init.d/odoo-server перезагрузки». Как только я убил процесс, а затем перезапустил его, он начал правильно перезагружаться.
Вы не показывали * все * из 'create'; вы повторно использовали имя 'stock_move' * где-то еще в этом методе *. –
Я буквально удалил все остальное в файле, чтобы разобраться в этом, и это все еще происходит. Это действительно весь файл. – glimmertea
Единственный способ получить исключение - это то, что есть фактическое назначение, цель для цикла loop, 'with', имя аргумента или выражение' import', которое использует это имя в методе 'create'. –