'模块'对象没有属性' py'从cmd运行时

时间:2016-09-16 08:49:24

标签: python unit-testing cmd

我目前正在学习单元测试,我偶然发现了一个奇怪的错误:

如果我从PyCharm内部运行我的脚本,一切都很完美。如果我从cmd.exe(作为管理员)运行它,我会收到以下错误:

enter image description here

这是我的代码:

import unittest

class TutorialUnittest(unittest.TestCase):
    def test_add(self):
        self.assertEqual(23,23)
        self.assertNotEqual(11,12)

# function for raising errors.
def test_raise(self):
    with self.assertRaises(Exception):
        raise Exception`

2 个答案:

答案 0 :(得分:27)

只需删除.py扩展程序。

您正在使用-m命令行标志运行测试。 Python文档会告诉您更多相关信息,请查看此link

总之,-m选项允许您运行模块,在您的情况下是unittest模块。此模块希望接收模块路径或类路径,遵循模块路径的Python格式(使用点)。例如,如果要在mypackage文件夹中的mytests模块中运行FirstTest类,可以使用以下命令行:

python -m unittest mypackage.mytests.FirstTest

假设您正在从mypackage的父文件夹运行上一个命令行。这允许您精确选择要运行的测试(甚至在模块内部)。

当您添加.py扩展名时,unittest正在您提供的模块路径的最后一个元素中查找py对象(如模块或类),但是这个对象不存在。这正是您的终端错误所说的:

AttributeError: ’module’ object has no attribute ’py’

答案 1 :(得分:0)

您可以在脚本底部添加:

if __name__ == "__main__":
    unittest.main()

然后您可以正常运行python test_my_function.py