今回は、「Takes 0 positional arguments but 1 was given」というエラーを修正する方法をご紹介します。
では、さっそく始めてみましょう。
なぜ「Takes ‘0’ positional arguments but ‘1’ was given」エラーが発生するのでしょうか?
num_1、num_2 の2つの引数を受け取るサンプル関数 add_numbers を定義してみましょう。
例として以下の様なコードになります。
def add_numbers(num_1, num_2):
sum = num_1 + num_2
print ( 'The sum of two numbers is: ' , sum )
|
これで、2つの数字を足すときは、その数字を引数として関数に渡すだけでよい。
下記をご覧ください。
結果は、以下の通りになります。
>>> add_numbers( 33 , 23 ) # calling the function first time
>>> The sum of two numbers is : 56
>>> add_numbers( 45 , 45 ) # calling the function second time
>>> The sum of two numbers is : 90
|
この出力から、関数を何度も呼び出す方が、生の足し算を行うよりもずっと簡単であることがわかる。
もうひとつ、2つの数字を掛け合わせる作業をしてみましょう。
コード例2:
def multiply(num_1, num_2):
product = num_1 * num_2
print ( 'The product of two numbers is: ' , product)
|
結果は以下の通りです。
>>> multiply( 4 , 100 ) # calling the function first time
>>> The product of two numbers is : 400
>>> multiply( 40 , 60 ) # calling the function second time
>>> The product of two numbers is : 2400
|
関数の種類
関数の種類は2つあります。
- パラメタライズド。パラメータ化:括弧の中に値を入れる。一般的にハイエンドなアプリケーションで使用される。
- パラメタライズドでないもの。空白の括弧。一般的に基本的な処理に使用される。
Traceback (most recent call last): File "c:UsersLenovoDesktopsample.py", line 8, in <module>
function(parameter)
TypeError: function() takes 0 positional arguments but 1 was given |
プログラマがある関数のパラメータを扱うとき、いくつかのことを念頭に置いておく必要がある。
-
- 関数が保持するパラメータの数
-
- 各パラメータが何をするものなのか。
プログラマがこの2点を考慮しなかった場合、Pythonインタープリタはエラーを発生させます。
def divide():
num_1 = int ( input ( 'enter num_1: ' )) # taking input for num_1
num_2 = int ( input ( 'enter num_2: ' )) # taking input for num_2
div = num1 / num2
print ( 'The division is: ' , div)
divide( 3 )
|
これはPythonで最も一般的なTypeErrorです。
これは、指定されたデータ型に一致するものが、その特定のコードの部分で見つからないときに発生します。
例 位置引数を0個取りますが、1個与えられました。
例えば、2つの数字を割り算する関数を定義するとします。
これはパラメータ化されていない関数で、呼び出した後に入力を受け取ります。
例1.
Traceback (most recent call last): File "c:UsersLenovoDesktopsample.py" , line 8 , in <module>
divide( 3 )
TypeError: divide() takes 0 positional arguments but 1 was given
|
結果は、以下の通りになります。
def add_numbers():
num_1 = int ( input ( 'Enter number 1: ' ))
num_2 = int ( input ( 'Enter number 2: ' ))
sum = num_1 + num_2
print ( 'The sum of two numbers is: ' , sum )
add_numbers( 45 , 2 ) # calling the function in python shell
|
上記の場合、divide()関数は2つのパラメータを必要とします。
両方のパラメータは必須であり、どちらも位置引数ではありません。
このため、この関数は “takes 0 positional arguments, but 1 was given” というエラーを投げることになります。
1つのパラメータでdivide()を呼び出すと、インタープリタはエラーを投げる。
例2:
Traceback (most recent call last): File "c:UsersLenovoDesktopsample.py" , line 7 , in <module>
add_numbers( 45 , 2 )
TypeError: add_numbers() takes 0 positional arguments but 2 were given
|
結果は、以下の通りになります。
インタープリタはコードを一行ずつ読むので、コードの各行をスキャンしてエラーを投げることが分かっている。
この関数が何も受け取らないにもかかわらず、2つの位置引数を与えたので、同じエラーが発生します。
How to Fix “Takes ‘0’ positional arguments but ‘1’ was given” Error?
このエラーでは、エラーが発生した関数名が表示されます。
- その関数がどのようなパラメータを受け取っているかを確認します。
- その関数のすべての呼び出しを検索し、関数呼び出しのいずれかが間違って作られているかどうかを識別します。
- 問題の関数呼び出しを変更するだけで、エラーを修正することができます。
まとめ
位置引数を0個取るが、1個与えられた」という話題はここで終わりです。
コンセプトはわかりやすいですね。
あなたのコードにあったエラーは修正できたでしょうか?もし、何か質問があれば、私たちに連絡してください。