【问题标题】:Python | NameError when importing a class into a test script蟒蛇 |将类导入测试脚本时出现 NameError
【发布时间】:2019-03-26 03:21:25
【问题描述】:

所以我有一个定义“类时间”的 Python 模块 (time.py)。然后我有一个导入该类的测试脚本 (test_time.py),但是当我尝试创建该类的一个实例时,它会抛出一个 NameError。 但是,如果我将模块的名称更改为 time1.py,测试脚本可以正常工作。我只是想不通为什么当模块命名为 time.py 时它不起作用时间>。提前致谢。

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:名称“时间”未定义

【问题讨论】:

  • 标准库中有一个模块time是你不小心导入的。
  • 哦好的,我没想到,谢谢

标签: python class module nameerror


【解决方案1】:

因为时间也是标准库的一个模块,但它不包含时间对象。 如果您尝试获取导入的模块目录:

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

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

【讨论】:

  • 非常感谢您的回复,我一定会让文件名更有意义以避免将来发生这种情况
【解决方案2】:

正如 Klaus D. 已经回答的那样,python 已经有一个时间模块。 Python 导入解析规定,当您执行 import time 时,python 会检查 Python 中是否存在名为 time 的全局安装模块(在 Python 核心内部或使用 pip 安装)。所以我建议您按照您对 @ 所说的更改文件名987654323@ 或其他。

【讨论】:

  • ? 感谢您的回复
猜你喜欢
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多