我的课程就是这样:
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
我很确定这是使用super()的正确方法,因为这段代码在另一个系统上工作正常。这个问题更多的是询问是否有人知道它可能在系统或python环境中可能导致它不能将stock_move识别为用于调用父类的create()方法的类名。
系统是ubuntu服务器14.04,python 2.7.6。以前的代码运行的系统是ubuntu桌面14.04也运行python 2.7.6。
我认为没有任何理由会发生这种情况。为什么python认为stock_move是局部变量?
编辑:
更改班级名称后,我明白了:
new_id = super(stock_move_too, self).create(cr, uid, vals, context=context)
UnboundLocalError: local variable 'stock_move' referenced before assignment
stock_move甚至根本没用,错误仍显示??
Edit2:
问题是由于我发出“sudo /etc/init.d/odoo-server restart”命令时odoo-server实际上没有关闭。一旦我杀死了该进程,然后重新启动它,它就开始正常重启。
答案 0 :(得分:2)
您在create
方法中使用了同名,因此Python将stock_move
指定为本地,而不是全局名称。
Python在编译时确定名称的范围,并且名称范围适用于整个块。只要您在函数范围内的任何位置绑定名称,名称就会被视为本地名称;这意味着您在赋值(stock_move = ...
)中使用了该名称,将其用作函数的参数名称,用于导入(from somewhere import stock_move
)或将其用作{{1}中的目标}}循环,for
语句或with
处理程序(except
等)。