TypeError: ‘str’ object is not callableが起きた場合

Pythonを学習している時によく見かけるエラーです!
原因と解決方法を見てみましょう。

TypeError: ‘str’ object is not callableとは?

何気なくプログラムを書いている時に、このエラーが発生して困ることがありませんか?
まずはどのような時に起こるエラーなのか見てみましょう!

講師
講師

最初に入力された数字を2倍して表示。更にもう一度入力して2つの数字の合計を表示するコード。

# input関数を使用して数字を入力
input = input('好きな数字を入力してください:')
# input関数の入力値のデフォルトはstr型なので、計算を行うためにint型にキャスト(型変換)
your_num = int(input)
# 2倍にする処理
double_num = your_num * 2
# 2倍にした数値を表示
print(f'入力した数字を2倍にしたら{double_num}です!')

# input関数を使用してもう一度数字を入力
input2 = input('別の数字を入力してください:')
your_num2 = int(input2)
# 最初に入力した数字と合計する処理
sum_num = your_num + your_num2
# 合計した数値を表示
print(f'最初に入力した数字と、次に入力した数字を足すと{sum_num}です!')
# 実行結果

好きな数字を入力してください:10
入力した数字を2倍にしたら20です!
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-a608d8265aaa> in <module>()
      4 print(f'入力した数字を2倍にしたら{double_num}です!')
      5 
----> 6 input2 = input('別の数字を入力してください:')
      7 your_num2 = int(input2)
      8 sum_num = your_num + your_num2

TypeError: 'str' object is not callable

処理自体は問題無さそうですが、エラーになってしまいましたね。
エラー内容を見ると、
6行目のinput2 = input(‘別の数字を入力してください:’)の辺りで発生しているようです。
一番最後に、TypeError: ‘str’ object is not callableと表示されているのが分かります。

講師
講師

これは予約語を変数名として使ってしまったことによるエラーです。
つまり、使ってはいけない名前を変数名として定義してしまっているということですね。

講師
講師
input = input('好きな数字を入力してください:')

実はこの段階で原因になるコードが書かれています。
inputという関数名を変数名としていることが原因です!
inputという変数に何が入っているか見てみましょう。

講師
講師
# inputの中身を確認
print(input)

# 実行結果
10

10と言うのは最初に入力した値ですね。
input関数によって入力された値がinputという変数に代入されてしまっています。
では、正しい状態の時はどのように表示されるか見てみましょう。

講師
講師
# inputの中身を確認
print(input)

# 実行結果
<bound method Kernel.raw_input of <google.colab._kernel.Kernel object at 0x7fc0d8c4a590>>

こちらが正しい状態です。
上の表示と見比べると明らかに中身が異なりますよね?
inputの中身が置き換わった状態で、再度6行目でinput関数を実行しようとしているためエラーが発生しています。

講師
講師

正しい書き方

# input関数を使用して数字を入力(変数名をinput_numに変更)
input_num = input('好きな数字を入力してください:')
# input関数の入力値のデフォルトはstr型なので、計算を行うためにint型にキャスト(型変換)
your_num = int(input_num)
# 2倍にする処理
double_num = your_num * 2
# 2倍にした数値を表示
print(f'入力した数字を2倍にしたら{double_num}です!')

# input関数を使用してもう一度数字を入力(変数名をinput_num2に変更)
input_num2 = input('別の数字を入力してください:')
your_num2 = int(input_num2)
# 最初に入力した数字と合計する処理
sum_num = your_num + your_num2
# 合計した数値を表示
print(f'最初に入力した数字と、次に入力した数字を足すと{sum_num}です!')

# 実行結果
好きな数字を入力してください:10
入力した数字を2倍にしたら20です!
別の数字を入力してください:50
最初に入力した数字と、次に入力した数字を足すと60です!

変数名をinputからinput_numに変更しました。
これでエラーにならず実行結果を表示することが出来ました!

講師
講師

誤って予約語を変数名にしてしまったら?

一度定義してしまうと、変数名を変更しただけではエラーは解除されません。
解決方法として、
①ファイルを一度閉じ、再度開いてから変数名を変更し実行
②変数を削除
の2つがあります。

①の場合は再起動に近い形ですね。変数の定義を全てリセットするので最初から実行する必要があります。
②の場合は問題のある変数だけ、定義を削除することができます。

講師
講師
# 誤ってinputを変数として使用
input = 10
# inputの中身を確認
print('inputの中身を確認')
print(input)

# inputという変数を削除
del input
# 変数の定義が削除されているか確認
print('削除後のinputの中身を確認')
print(input)

# 実行結果
inputの中身を確認
10

削除後のinputの中身を確認
<bound method Kernel.raw_input of <google.colab._kernel.Kernel object at 0x7fc0d8c4a590>>

delを使用し、変数の定義を削除することが出来ます。
上記コードでdelの前後で表示が変わっていますね?
削除後の表示が正しい状態ですので、delにより元に戻ったことが確認できました!

講師
講師

まとめ

・TypeError: ‘str’ object is not callableは予約語を変数名として使用してしまうと発生するエラー
・間違って定義してしまった場合はdelで定義を削除しましょう!
・エラーの発生個所は、あくまでエラーが起きた場所であり、原因となる定義はその前段階にあることに注意!

Start Labでは、
未経験でも始められる入門コースから、DXや機械学習に特化したコースまで
スキルや目的に合わせて学習コースをお選びいただけます!
まずはお気軽にお問い合わせください✨