当我使用以下代码时,它可以正常工作:
scrollPane.setBorder(new LineBorder(new Color(192,192,192)));
但是,当我使用以下代码时,它会抛出一个错误:
' NoneType'对象不可迭代。
def xyz(self, cr, uid, ids, vals, context=None):
.......
.......
self.write(cr, uid, ids, vals, context=context)
两种方法都有相同的参数,但写方法不同。
我没有更新代码中的上下文。
但是第二个会抛出一个错误,为什么?
此外,为什么def xyz(self, cr, uid, ids, vals, context=None):
.......
.......
self.write(cr, uid, ids, vals, context=None)
在论证中。
答案 0 :(得分:4)
有两件不同的事情
def xyz(self, cr, uid, ids, vals, context=None):
它的方法定义,您在其中指定参数的默认值,这意味着当您没有通过方法调用传递该参数时,它将采用默认值< / strong>用于该参数。
Click here了解更多
self.write(cr, uid, ids, vals, context=None)
此案例定义您在上下文中传递无。这是关键字参数的概念。
Click here了解更多
def xyz(self, cr, uid, ids, vals, context=None):
.......
.......
self.write(cr, uid, ids, vals, context=context)
它表明只有当没有将上下文值传递给该方法 XYZ 时才会在上下文中采用默认值,并且相同的值将转移到write方法所以它不会给你一个错误。
context = context 表示上下文具有在调用时分配给上下文参数的值,可能是也可能不是。尝试在 XYZ 中传递none,调用会给你同样的错误。
def xyz(self, cr, uid, ids, vals, context=None):
.......
.......
self.write(cr, uid, ids, vals, context=None)
在第二种情况下,你总是将none传递给write方法而不传递context = context,所以除了没有机会之外没有机会。
通常,当你调用任何方法时,永远不会将None传递给上下文,只需设置{}(空白字典),它至少不会给你错误。
最后,为什么你得到这个错误是因为在某处的写入方法CONTEXT(实际上是传递NONE)用于该模型。如果你想知道原因,那么你需要找出所有的地方,其中为该模型覆盖了write方法,以及在哪里使用上下文。
答案 1 :(得分:0)
你没有告诉我们你在哪里调用这些函数,很可能你用一些可迭代的上下文调用xyz
。这就是为什么在第一种情况下,上下文不是None而且它有效。而在第二种情况下,您不保留在参数中接收的上下文并发送硬编码值None
哪个是不可迭代的。无论如何,你究竟想要完成什么?你必须做的事情就像 -
xyz(..., context = []) # that's why context is iterable in first case and not second
在第一种情况下,此context
不会是None
。