2015-06-26 122 views
0

我对python很新颖,并且已经有了一段时间了解它。我有一个主文件Python模块问题

import Tests 
from Tests import CashAMDSale 

CashAMDSale.AMDSale() 

和CashAMDSale

import pyodbc 
import DataFunctions 
import automa 
from DataFunctions import * 
from automa.api import * 

def AMDSale(): 
    AMDInstance = DataFunctions.GetValidAMD() 

这里是GetValidAMD

import pyodbc 

def ValidAMD(GetValidAMD): 
    (short method talking to a database) 

我的错误在具有AMDInstance = DataFunctions.GetValidAMD()

我得到错误的行出现AttributeError: 'module' object has no attribute 'GetValidAMD'

我看了,找了一个答案,没有任何工作。有任何想法吗?谢谢!

+0

你可以发布''DataFunctions''模块的源代码吗? –

+0

DataFunctions是我在GetValidAMD中的文件夹 – Shikumaru

回答

1

DataFunctions被导入在一类称为DataFunctions是一个文件夹,这意味着它是一个包,且必须包含一个__init__.py文件蟒将其识别为这样。

从包中导入*时,不会自动导入所有模块。这是记录在docs

所以你的代码工作,您可能需要显式导入你需要的模块:

import DataFunctions.GetValidAMD 

,或者您需要添加以下DataFunctions__init__.py

__all__ = ["GetValidAMD"] 

那么你可以import *从包装,一切听在__all__将被导入

+0

工作,感谢您的帮助,我不知道! :) – Shikumaru

1

当您创建的文件foo.py,你创建一个Python模块。当您执行import foo时,Python会评估该文件,并将其定义的所有变量,函数和类放入模块对象中,并将其指定给名称foo

# foo.py 
x = 1 
def foo(): 
    print 'foo' 

>>> import foo 
>>> type(foo) 
<type 'module'> 
>>> foo.x 
1 
>>> foo.foo() 
foo 

当你创建一个带有__init__.py文件的目录bar,您创建一个Python包。当你这样做import bar,Python的评估__init__.py文件,并将所有变量,函数和类,它定义成一个模块对象,它分配给名称bar

# bar/__init__.py 
y = 2 
def bar(): 
    print 'bar' 

>>> import bar 
>>> type(bar) 
<type 'module'> 
>>> bar.y 
2 
>>> bar.bar() 
bar 

当您创建蟒蛇模块一个Python内(也就是内部含有__init__.py目录与.py结尾的文件),您必须通过这个包导入这些模块:

>>> # place foo.py in bar/ 
>>> import foo 
Traceback (most recent call last): 
    ... 
ImportError: No module named foo 
>>> import bar.foo 
>>> bar.foo.x 
1 
>>> bar.foo.foo() 
foo 

现在, ssuming你的项目结构为:

main.py 
DataFunctions/ 
    __init__.py 
    CashAMDSale.py 
     def AMDSale(): ... 
    GetValidAMD.py 
     def ValidAMD(GetValidAMD): ... 

main脚本可以import DataFunctions.CashAMDSale和使用DataFunctions.CashAMDSale.AMDSale(),并import DataFunctions.GetValidAMD和使用DataFunctions.GetValidAMD.ValidAMD()

+0

我应该澄清我的文件夹结构,对不起! 其 'main.py DataFunctions/ __init__.py GetValidAMD.py 测试/ __init__.py CashAMDSale.py' – Shikumaru

+0

谢谢,这帮助! :) – Shikumaru

0

退房this

这是同样的问题。您正在导入DataFunctions这是一个模块。我expct那里是模块,其需要与

from DataFunctions import DataFunctions 
... 
AMDInstance = DataFunctions.GetValidAMD()