无法解决AttributeError:'module'对象没有属性'calcKappa'

时间:2013-10-15 19:29:22

标签: python

我对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'

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

global c
global lamb
global pi
global kappa
global mu
global sumofkappa
global f

这些线条不符合您的想法。 global是一个关键字,位于函数中,用于引用变量的全局声明。

e.g。

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)

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