即使正在导入Python

时间:2016-03-22 17:11:44

标签: python

我正在编写一个如下所示的Python包:

|- datum/
    |- __init__.py
    |- database.py

__初始化__。PY

from .database import Database

def connect(url):
    print(Database)         # for debugging
    return Database(url)

database.py

class Database(object):
    def __init__(self, url):
        self.url = url

    ...more methods

这是在开发模式下作为名为datum的程序包安装的。如果我在此软件包之外调用connect,如:

import datum
db = datum.connect('postgresql://xxx')

......这是输出:

<class 'datum.database.Database'>
Traceback (most recent call last):
  File "Z:\AIS\Flask\ais\engine\scripts\load_pwd_parcels.py", line 30, in <module>
    source_db = Database(source_db_url)
NameError: name 'Database' is not defined

我很困惑,因为该类正在被导入正常 - 我可以打印它,甚至可以在其上运行dir并查看我的所有方法 - 但是当我尝试实例化某些内容时,它“未定义”。有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

NameError表示无法找到本地或全局名称。我会确保你的&#34; load_pwd_parcels.py&#34;文件包括:

from database import Database

或者,您可以这样做:

import database
source_db = database.Database(source_db_url)

后一个选项是一个很好的选择,因为它为database提供了自己的命名空间。用PEP 20 -- The Zen of Python中蒂姆·彼得斯的话来说: &#34;命名空间是一个很棒的主意 - 让我们做更多的事情!&#34;