web-dev-qa-db-ja.com

Python:TypeError:<lambda>()は0の位置引数を取りますが、アサートのために1が指定されました

ユニットテストを行うのは初めてです。私は現在pytestを実行しています。私はこのProgram.pyを実行していますが、Program_test.pyでpytestを実行すると、以下のコードにアサート行がある場所からのこれらのTypeErrorsが原因でテストに失敗しました。プログラムにユーザーに入力値を要求するか、プログラムを終了するためにEnterキーを押します。 Program_test.pyプログラムに 'import pytest'が既に含まれています。

ラムダを間違って使用していますか?これに最善のアプローチをして、それらのユーザー入力を機能させる方法はわかりません。これは、ユーザーからget_weight関数をテストするだけです。

***すでに修正されています。ラムダに問題があり、その下がとても役に立ちました

3
smokingpenguin

以下は、どこが間違っているかを示す例です。説明のために、ラムダを変数に割り当てています。

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

Argを指定してzero_arg_lambdaを呼び出します(エラーと同じ)。

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の例は、パラメーターを取り、単にコロンの右側に値を返します。 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 
7
cullzie