Объект 'module' не имеет атрибута 'py' при запуске из 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'

Ответ 1

Просто удалите расширение .py.

Вы запускаете свои тесты, используя флаг командной строки -m. Документация Python расскажет вам больше об этом, просто ознакомьтесь с этой ссылкой .

Словом, параметр -m позволяет запустить модуль, в вашем случае - модуль unittest. Этот модуль ожидает получить путь к модулю или путь к классу, следуя формату Python для пути к модулю (используя точки). Например, если вы хотите запустить класс FirstTest в модуле mytests в папке mypackage, вы должны использовать следующую командную строку:

python -m unittest mypackage.mytests.FirstTest

Предположим, что вы используете предыдущую командную строку из родительской папки mypackage. Это позволяет вам точно выбирать тесты, которые вы хотите запустить (даже внутри модуля).

Когда вы добавляете расширение .py, unittest ищет объект py (например, модуль или класс) внутри последнего элемента пути модуля, который вы указали, но этот объект не существует. Это именно то, что говорит ваша ошибка терминала:

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

Ответ 2

Вы можете добавить внизу вашего скрипта:

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

Тогда вы можете запустить python test_my_function.py нормально