Python | Random.choice() takes 2 positional arguments but 3 were given エラーの原因と解決策

2023-02-26Python エラー,Python

Python | Random.choice() takes 2 positional arguments but 3 were given エラーの原因と解決策

Pythonの実行時に発生するエラー「Random.choice() takes 2 positional arguments but 3 were given」の原因と解決策について紹介しています。

TypeError: Random.choice() takes 2 positional arguments but 3 were given
TypeError: Random.choice() は 2つの位置引数を取りますが、3つが与えられました。

確認環境

Windows11 ローカル
Python python-3.11.1

Random.choice() takes 2 positional arguments but 3 were given エラーの原因

「Random.choice() takes 2 positional arguments but 3 were given」というPythonの実行エラーは「random」モジュールのchoice()関数を利用している場合に発生するエラーです。

例えば以下のような事がエラーの発生原因にあります。

  • choice()関数で許可されていないオプション引数を渡した

Random.choice() takes 2 positional arguments but 3 were given エラーの発生例と解決策

「Random.choice() takes 2 positional arguments but 3 were given」エラーが発生するコード例とその解決策を紹介します。

choice()関数でランダムに取得しようとしている値の数がリストのデータ数より多い

「random」モジュールのchoice()関数で第一引数以外にオプション引数を指定した場合に出力された「TypeError」となります。

import random

data_list = [60, 80, 10, 40, 50]

rand_data_list = random.choice(data_list, 3)

print(rand_data_list)
# TypeError: Random.choice() takes 2 positional arguments but 3 were given

上記のコードエラーの理由が、リストからランダムに複数の値を取得したいというものであれば、choice()関数の代わりにsample()関数を利用する事で解決する事が可能です。

sample()関数は第二引数で指定可能な値の数は、リストのデータ数より少なくする必要があります。

import random

data_list = [60, 80, 10, 40, 50]

rand_data_list = random.sample(data_list, 3)

print(rand_data_list)
# [40, 50, 60] ※結果例