Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

TypeError: 'list' object is not callableとは何ですか?

f:id:kenken0326:20210204135737p:plain

こんにちはPyQチームです。

今回はTypeError: 'list' object is not callableというエラーの意味と考えられる原因を紹介します。

「TypeError: 'list' object is not callable」というエラーのお悩み

リストに入っている数字を取り出そうとしましたが、TypeError: 'list' object is not callableというエラーが出てしまい取り出せません。このエラーはどんなエラーなのでしょうか?

入力した内容(コード)

# リストnumbers作成
numbers = [100, 200, 300, 400, 500]

# 先頭の要素の表示
numbers(0)

出たエラー(実行結果)

Traceback (most recent call last):
  File "1.py", line 5, in <module>
    numbers(0)
TypeError: 'list' object is not callable

回答

リストを関数として呼び出したので、エラーになりました。

'list' object is not callableの解説

呼び出し可能(callable)ではないオブジェクトに対し、呼び出しをするとTypeErrorになります。

呼び出し可能オブジェクトとは、関数やメソッドなどのように() を付けて呼び出すことができるオブジェクトのことです。

numbersはリスト型であり、リスト型は呼び出し可能オブジェクトではありません。

リストの要素を取得するには()ではなく[]を使います。

numbersの先頭の要素を取得する方法は、numbers(0)ではなくnumbers[0]です。

'list' object is not callableが出る時にチェックするといい、よくあるミス

  • 呼び出しできないオブジェクトを呼び出そうとしていないか
  • 使用する記号は間違っていないか。
    • リストの値を参照するつもりで()を使うと、リストを関数として呼び出したことになってしまい、エラーが出ます。
  • 誤った型の引数が指定されていないか

類似エラーの紹介

TypeError: 'str' object is not callable

文字列を関数として使おうとしているときにこのエラーが表示されます。

>>> a = "ABC"
>>> a()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

TypeError: 'module' object is not callable

モジュールの利用方法に問題がある場合にエラーが表示されます。
以下の場合は、 from datetime import datetimeと書くかdatetime.datetime(2021,1,1)と書く必要があります。

>>> import datetime
>>> datetime(2021,1,1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable

その他のTypeError

TypeError: list indices must be integers or slices, not str

インデックス( [] )に文字列が入っている時にこのエラーが表示されます。

blog.pyq.jp

TypeError: 'int' object is not iterable

繰り返し(for文)に使えないオブジェクトを繰り返し処理で使っているときに発生するエラーです。 for文のinの中に繰り返すことのできない値を入れると表示されます。

blog.pyq.jp

TypeError: must be str, not int

文字列と数値を結合しようとするときに発生するエラーです。

blog.pyq.jp

TypeError: can only concatenate tuple (not "int") to tuple

タプルと数値を結合したことが原因で表示されるエラーです。

blog.pyq.jp

Copyright ©2017- BeProud Inc. All rights reserved.