Python: TypeError: <lambda>() принимает 0 позиционных аргументов, но 1 был дан из-за утверждения - PullRequest
0 голосов
/ 12 февраля 2019

Я новичок в создании модульных тестов.Я в настоящее время запускаю pytest.У меня запущен этот Program.py, но когда я запускаю pytest для своего Program_test.py, я проваливаю тесты из-за этих TypeErrors от моего места, где у меня была строка подтверждения в приведенном ниже коде.У меня есть программа, чтобы попросить пользователей ввести значение или войти, чтобы выйти из программы.У меня уже есть «импортный тест», включенный в мою программу Program_test.py.

Я неправильно использую лямбду?Я не уверен, как лучше всего подойти к этому и заставить эти пользовательские входы работать.Это просто тестирование функции get_weight от пользователей.

*** Это было уже исправлено.У меня была проблема с лямбдой, и под ней мне очень помогло

1 Ответ

0 голосов
/ 12 февраля 2019

Вот пример, чтобы показать, где вы идете не так, и с целью объяснения я назначаю лямбда-переменным:

zero_arg_lambda = lambda: "131"  # Takes no args
one_arg_lambda = lambda x: "131"  # Takes one arg

Вызовите zero_arg_lambda с arg (так же, как ваша ошибка):

zero_arg_lambda(1)
>>> Traceback (most recent call last):
>>> File "<input>", line 1, in <module>
>>> TypeError: <lambda>() takes no arguments (1 given)

Вызовите one_arg_lambda:

one_arg_lambda(1)
>>> "131"

Короче говоря, ваш код передает параметр в лямбду, даже если вы указали, что он не принимает его.

Пример one_arg_lambda принимает параметр и просто возвращает значение справа от двоеточия.Я бы порекомендовал прочитать документы на лямбда

Или, если вы не смотрите туда, ожидаемый формат лямбды:

лямбда-параметры: выражение

Также обратите внимание на документы по monkeypatch.context.setattr , которые имеют хороший пример использования лямбда-выражения.

Для точного определения, ошибка в вашем коде исходит из вызова context.setattr внутри вашего теста.

def test_get_weight_returns_valid_input(monkeypatch):
    with monkeypatch.context() as context:
        # Old line causing error: context.setattr('builtins.input', lambda: "131")
        context.setattr('builtins.input', lambda x: "131")  # Fixed 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...