Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的类出错_Python_Oop - Fatal编程技术网

python中的类出错

python中的类出错,python,oop,Python,Oop,我已经编写了一些代码,当直接输入到解释器中时可以工作,但调用时失败 下面是一些代码(这里有很多代码可以复制): 每当我尝试运行脚本时,我都会收到一个错误AttributeError:“generateTable”对象没有属性“model”。IPython指出了一行bse=dict(model.bse)。同样,当我以交互方式运行它时(即逐块运行,没有类),这也会起作用,但是当我导入文件并尝试运行它时,我会收到错误 编辑: 1) 它是如何创建的 import project a = project

我已经编写了一些代码,当直接输入到解释器中时可以工作,但调用时失败

下面是一些代码(这里有很多代码可以复制):

每当我尝试运行脚本时,我都会收到一个错误
AttributeError:“generateTable”对象没有属性“model”
。IPython指出了一行
bse=dict(model.bse)
。同样,当我以交互方式运行它时(即逐块运行,没有类),这也会起作用,但是当我导入文件并尝试运行它时,我会收到错误

编辑:

1) 它是如何创建的

import project

a = project.generateTable('/path/to/test.tex', models, center='True', parens='se', var_names=None)
a.createModel()
2) 整个回溯是:

In [26]: a.createModel()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/path/to/project/<ipython-input-26-6774b6d1804c> in <module>()
----> 1 a.createModel()

/path/to/project/project.py in createModel(self)
     39         for model in models:
     40             params = dict(model.params)
---> 41             bse = dict(model.bse)
     42             pvals = dict(model.pvalues)
     43             results.append(dict((k, [params[k], bse[k], pvals[k]]) for k in sorted(params.iterkeys())))
唯一不同的是for循环中的模型已更改为test_模型。我以前试过,但没用,所以我不太确定它是怎么发生的


谢谢大家的帮助!如果有人能指出这一改变是如何消除特定错误信息的,我们将不胜感激。我想知道我在做什么,而不是继续前进,接受它

每当您看到类似于
AttributeError:'xxx'对象没有属性'yyy'
的错误时,这只能意味着一件事:您有一个类型为
xxx
的对象,您试图访问该属性
.yyy
,但该对象没有该属性。调试的第一条规则:假设错误是真实的

具体来说,在某个地方,你正在做一些事情,比如:

a = project.generateTable()
...
foo=a.model

当我查看您发布的代码时,我没有看到为类
generateTable
定义属性
model
。你认为你是在什么地方设置的吗?您可能不是(看起来是这样),也可能是在首次尝试访问它之后的某个时间点设置了它。

您必须将在
project
全局范围中定义的变量作为
project
命名空间的成员引用。在代码中,调用

import project

a = project.generateTable('/path/to/test.tex', models, center='True', parens='se', var_names=None)
a.createModel()
…变量
models
不绑定任何内容。它是一个空值,当您调用
\u init\u
时,对象属性不会被绑定,并且您会得到与nullref相当的Python。为了使用它,您需要将它写成
project.models
。(也可以从顶部的项目导入模型中编写


更新:抱歉,查看您的更新,错误消息和代码之间似乎存在差异。错误消息说您正在迭代“模型”,而不是“self.models”。你说你以前试过改变变量名,但是没有用;我打赌你漏掉了“self.*”限定词。这可能会导致您使用不同的“models”变量。

您能否演示如何创建generateTable对象/调用createModel方法?我做了我认为正确的修复。如果我错了,请更正。代码中的其他地方可能存在名称冲突。尝试将变量名
model
更改为,比如说,
currModel
。堆栈跟踪显示models中model的行
,但代码似乎在self中有model的
。models
。更复杂的是,您说您的错误是抱怨属性
model
(没有尾随的“s”)。你确定你所报告的一切都是准确的吗?您描述问题的方式似乎有点错误。(在“编辑3”后发布)根据您发布的原始错误消息判断,可能是您在self.model
中为model添加了
,而不是在self.models
中为model添加了
。很难说清楚,因为你的问题非常混乱,信息相互冲突。我认为如果是这种情况,会出现与报告的错误信息不同的错误信息。也许,但如果他发布的代码就是他使用的代码,那么这就是一个问题。(如果我们只关注错误消息,请注意它提到“models”,而不是“self.models”作为迭代的变量,这也会导致命名问题。)
model
来自for循环:for
self.models中的model.models:
和self.models在init函数中定义:
self.models=models
其中models在
a=project.generatedTable('/path/to/test.tex',models)
@user1074057:我知道,但这并不能解释您报告的错误消息。正如我的回答所说,当你得到一个“objecthasnoattribute”错误时,它几乎总是意味着你在做
x.y
,而
y
并不存在。如果错误在循环中,您将得到一个“unbound lcal variable”错误,而不是您所说的。在您发布的代码中,您没有指定
self.model
a.model
a = project.generateTable()
...
foo=a.model
import project

a = project.generateTable('/path/to/test.tex', models, center='True', parens='se', var_names=None)
a.createModel()