0

我的课就是这样:

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 server 14.04,python 2.7.6。之前运行代码的系统是 ubuntu desktop 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 甚至根本没有使用,错误仍然显示?

编辑2:

问题是由于当我发出“sudo /etc/init.d/odoo-server restart”命令时 odoo-server 没有真正关闭引起的。一旦我终止了该进程,然后重新启动它,它就开始正常重新启动。

4

1 回答 1

2

您在方法中使用了相同的名称create,因此 Python 指定stock_move本地名称,而不是全局名称。

Python在编译时确定名称的范围,名称范围适用于整个块。只要您将名称绑定到函数范围内的任何位置,名称就会被视为本地名称;这意味着您在赋值(stock_move = ...)中使用了该名称,将其用作函数的参数名称,用于导入(from somewhere import stock_move)或将其用作for循环、with语句或except处理程序(with foo as stock_move等)中的目标。

于 2014-12-05T20:30:39.630 回答