【问题标题】:cannot resolve AttributeError: 'module' object has no attribute 'calcKappa'无法解析 AttributeError:“模块”对象没有属性“calcKappa”
【发布时间】:2013-10-15 19:29:22
【问题描述】:

我对 python 完全陌生。现在我正在使用 Enthought 机盖(python 2.7.3)。 我知道这个问题已经被问过一百万次了,我可以想象你们都厌倦了这个问题,但它一直困扰着我一整天。

import Basismodel

def doAll(c):
   #from Basismodel import calcKappa
   Basismodel.setC(c)
   Basismodel.setMu()
   Basismodel.setLambda()
   Basismodel.calcKappa()
   Basismodel.calcSumofprob()
   Basismodel.calcPi()

doAll(100)

使用另一个文件 Basismodel.py,其中定义了此处提到的所有功能。 前 3 个不会出错,但后 3 个会出错。

作为额外信息,我还将为您提供 Basismodel.py 的代码

global c
global lamb
global pi
global kappa
global mu
global sumofkappa
global f
f=0.6 #the percentage that takes the car
c=100 #max
sumofkappa=0 #sum of all kappa
sumofpi=0 #sum of all probabilities (should be equal to 1)
pi=[]
kappa=[1.0]
mu=[0.4]
lamb=[0.1] #Lambda is de arrival rate

def setC(y):
    c=y
    #print c

def setMu():
    global mu
    for i in range (c):
        mu.append((i+2)*mu[0])
        #print mu[i]

def setLambda():

    for i in range (c):
        lamb.append(lamb[1])
        #print lamb[i]

def calcKappa():

    for i in range (c):
        if (i==0):
            kappa[0]=1.0
        else:
            kappa[i].append(kappa[i-1]*lamb[i-1]/mu[i])

def calcSumofprob():
    for i in range (c):
        global sumofkappa
        sumofkappa += kappa[i]

def calcPi():
    for i in range (c):
        pi.append(kappa[i]/sumofkappa)

def calcAveragePi():
    for i in range(c):
        global sumofpi
        sumofpi += pi[i]
    return sumofpi/c

当我执行 main 时,它给出了这个错误,它没有任何意义,因为所有打印行都是 #comment 样式。 但是,我对为什么找不到该属性更感兴趣。此外,当我在 def doAll 之后设置“#from .Basismodel import calcKappa”时,错误会变为无法导入的 importerror。

%run "C:/Users/Thomas/Dropbox/Thesis/Canopy files/Main.py"
100
0.4
0.8
1.2
1.6
2.0
2.4
2.8
3.2
3.6
4.0
4.4
4.8
5.2
5.6
6.0
6.4
6.8
7.2
7.6
8.0
8.4
0.8
1.2
1.6
2.0
2.4
2.8
3.2
3.6
4.0
4.4
4.8
5.2
5.6
6.0
6.4
6.8
7.2
7.6
8.0
8.4
0.8
1.2
1.6
2.0
2.4
2.8
3.2
3.6
4.0
4.4
4.8
5.2
5.6
6.0
6.4
6.8
7.2
7.6
8.0
8.4
0.8
1.2
1.6
2.0
2.4
2.8
3.2
3.6
4.0
4.4
4.8
5.2
5.6
6.0
6.4
6.8
7.2
7.6
8.0
8.4
0.8
1.2
1.6
2.0
2.4
2.8
3.2
3.6
4.0
4.4
4.8
5.2
5.6
6.0
6.4
6.8
7.2
7.6
8.0
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\Thomas\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.1.0.1371.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
    174             else:
    175                 filename = fname
--> 176             exec compile(scripttext, filename, 'exec') in glob, loc
    177     else:
    178         def execfile(fname, *where):

C:\Users\Thomas\Dropbox\Thesis\Canopy files\Main.py in <module>()
    17     return Basismodel.calcAveragePi()
    18 
---> 19 doAll(100)
    20 
    21 #while(condition==0):

C:\Users\Thomas\Dropbox\Thesis\Canopy files\Main.py in doAll(c)
    12     Basismodel.setMu()
    13     Basismodel.setLambda()
---> 14     Basismodel.calcKappa()
    15     Basismodel.calcSumofprob()
    16     Basismodel.calcPi()

AttributeError: 'module' object has no attribute 'calcKappa'

有人可以帮忙吗?

【问题讨论】:

  • 尽量做一个最简单的例子,即一个只包含import basismodel; basismodel.calc_kappa()main.py和一个只包含def calc_kappa(): passbasismodel.py。这对你有用吗?

标签: python


【解决方案1】:
global c
global lamb
global pi
global kappa
global mu
global sumofkappa
global f

这些台词并没有按照您的想法进行。 global 是放置在函数中的关键字,用于引用变量的全局声明。

例如

x = 42
def without_global():
    x = 9
    print(x)

def with_global():
    global x
    x = 13
    print(x)

print(x)
without_global()
print(x)
with_global()
print(x)

不过,我在这里遇到了完全不同的问题。

【讨论】:

  • 感谢您的回复,问题是如果我设法修复某些东西,我会收到另一个错误,这可能是完全正常的。但是当我保存并关闭机盖时,重新打开它并再次运行它,我得到一个不同的错误。大多数时候仍然是属性错误,但随后来自稍后执行的一段代码。这意味着我正在进步,但我不知道为什么。
  • 听起来树冠给你带来了问题——如果可能的话,我会从命令行运行你的脚本。您可能需要以另一种方式工作-而不是编写一大块代码(例如整个程序),而是编写一个较小的块-也许是一个函数。当该功能有效时,然后添加另一个,依此类推,直到您拥有一个有效的整个程序。修复一个错误然后得到另一个错误是不是我认为正常的。
猜你喜欢
  • 2010-11-18
  • 2018-08-28
相关资源
最近更新 更多