[Python]「TypeError: '型' object is not callable」の原因と解決方法

2022年1月9日日曜日

Python

Python「TypeError: '型' object is not callable」のエラー原因と解決方法を紹介します。

結論

まず、出力されたエラーの内容を見てみましょう。
「TypeError: '型' object is not callable」は、「この'型'のオブジェクトは呼び出し可能(callable)ではない」という意味です。

関数ではないオブジェクトを関数呼び出しのように記述した際に発生するエラーです。
このエラーが発生するサンプルプログラムを見てみます。

sample_list = [1, 2, 3]
print( sample_list[0] ) # 1
print( sample_list(1) ) # TypeError: 'list' object is not callable

listの要素へのアクセス方法を誤っており、sample_listを関数呼び出しとして利用しようとしているため「TypeError: 'list' object is not callable」が発生しています。

よくある原因

組み込み関数と同名の変数を定義

組み込み関数と同じ名前の変数を定義しているケースです。

組み込み関数とは、print(), len()などPythonインタプリタによって事前に定義された関数です。

これらの関数と同じ名前を定義してしまうと、変数名として上書きされるため、
組み込み関数の呼び出し時に変数を参照してしまいます。

特に、グローバル変数が組み込み関数と同一の場合、原因となる変数を探しにくくなります。
組み込み関数と同じ名前の変数は定義しないようにしましょう。
以下の例はlen()を変数に上書きしています。

import json
sample_list = [1, 2, 3]

#組み込み関数len()として呼び出し
print( len(sample_list) )

# 変数lenを定義
len = len(sample_list)
# 変数lenを関数呼び出しするためエラー
print( len(sample_list) )
# TypeError: 'int' object is not callable

変数を関数呼び出し

listやdict、基本型(int, float, strなど)を関数として利用するケースです。

配列の要素の参照方法などを確認しましょう。

sample_list = [1, 2, 3]
sample_list(1) # TypeError: 'list' object is not callable

sample_dict = {"key_1":1}
sample_dict() # TypeError: 'dict' object is not callable

sample_int = 1
sample_int() # TypeError: 'int' object is not callable

関数と変数を混同している

関数名と変数名に類似した名称を定義している起こりやすいケースです。
関数名と変数名の命名規則を明確化して重複を防ぐようにしましょう

def temps():
    print('temps_func')

temp = 'temp'

temps() # temps_func
temp() # TypeError: 'str' object is not callable

エラーが発生したときのチェックポイント

  1. 組み込み関数と同じ名前の変数を定義していないか?
  2. 変数(配列など)の参照方法を誤っていないか?
  3. 変数名と関数名を混同していないか?
    関数名と認識している変数は本当に関数か?

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology