Python |将类导入测试脚本时发生NameError

时间:2019-03-26 03:21:26

标签: python class module nameerror

所以我有一个Python模块(time.py),它定义了“类时间”。然后,我有一个导入该类的测试脚本(test_time.py),但是当我尝试创建该类的实例时,它将引发NameError。 但是,如果我将模块的名称更改为time1.py,则测试脚本可以正常工作。我只是想不出为什么当模块名为 time.py 时,它无法正常工作em>。预先感谢。

time.py:

class Time:
    def __init__(self, init_hr = 12, init_min = 0, init_ampm = "AM"):
        self.hr = init_hr
        self.min = init_min
        self.ampm = init_ampm
    def ..... etc.

test_time.py:

from time import *
if __name__ == "__main__":
    t1 = Time()
    t2 = ...... etc.

我运行 test_time.py:

时遇到的错误

NameError:名称“时间”未定义

2 个答案:

答案 0 :(得分:0)

因为时间也是标准库的模块,但是它不包含Time对象。 如果您尝试获取通过以下方式导入的模块目录:

import time
print(time.__file__)

您会收到类似这样的错误:

AttributeError: 'builtin_function_or_method' object has no attribute '__file__'

如果将time.py重命名为time1.py,则可以解决此不匹配问题,并且测试脚本将使用您的本地模块。

import time1
print(time1.__file__)

然后您得到:

/<path-to-your-directory>/time1.pyc

如果您指定要从每个模块导入的内容,则可以避免这种不匹配,因为这样会立即给您带来错误:

from time import Time

您得到:

ImportError: cannot import name Time

,并使用更“复杂”的名称重命名您的导入模块,以避免这种不匹配是一种好习惯。

答案 1 :(得分:0)

正如Klaus D.已经回答的那样,python已经有一个时间模块。 Python导入解析规定,当您执行import time时,python会检查Python中是否有全局安装的模块(在Python内核内部或通过pip安装)称为time。因此,建议您将文件名更改为您对time1.py或其他内容说过。