HOWTO · Python

TypeError の解決: モジュール オブジェクトは Python で呼び出し可能ではありません

このチュートリアルでは、Python TypeError: module object is not callable の意味、その原因、およびこのエラーを解決する方法を示します。

このページの内容

どのプログラミング言語でも、多くのエラーが発生します。 コンパイル時に発生するものもあれば、実行時に発生するものもあります。

この記事では、TypeError: 'module' object is not callable について説明します。 このエラーは、class/methodmodule が同じ名前の場合に発生します。 同じ名前のため、それらの間で混乱します。

メソッドではなくモジュールをインポートすると、そのモジュールを呼び出すとエラーが発生します。これは、モジュールが呼び出し可能でないためです。 メソッドを呼び出すことしかできません。

Python での TypeError: 'module' object is not callable の原因

次のコードでは、組み込みモジュール socket をインポートします。 このモジュールにはさらに、socket() という名前のクラスが含まれています。

ここでは、メソッド名とクラス名は同じです。 socket のみをインポートして呼び出すと、インタープリターは TypeError: 'module' object is not callable をスローします。

コード例:

# Python 3.x
import socket

socket()

出力:

#Python 3.x
Traceback (most recent call last):
  File "<string>", line 2, in <module>
TypeError: 'module' object is not callable

自分で定義したカスタム モジュールの場合にも、このエラーに直面する可能性があります。 次のコードを作成し、infomodule.py という名前のファイルに保存しました。

コード例:

# Python 3.x
def infomodule():
    info = "meeting at 10:00 am."
    print(info)

次に、別の Python ファイルを作成し、次のコードを記述して、モジュール infomodule.py を呼び出します。 TypeError: 'module' object is not callable が発生します。

コード例:

# Python 3.x
import infomodule

Print(infomodule())

出力:

#Python 3.x
Traceback (most recent call last):
File "mycode.py", line 3, in <module>
 print(infomodule())
TypeError: 'module' object is not callable

Python で TypeError: 'module' object is not callable を解決する

モジュールからメソッド/クラスを呼び出す

このエラーを修正するには、モジュールを直接インポートする代わりに、モジュールからクラスをインポートします。 TypeError : module object is not callable を修正します。

ここで、クラス socket のオブジェクトの作成に成功しました。

コード例:

# Python 3.x
import socket

socket.socket()

出力:

<socket.socket fd=876, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>

カスタムモジュールの場合、同様にエラーを修正できます。 ここでは、モジュール infomodule のメソッド infomodule() を呼び出しました。

コード例:

import infomodule

print(infomodule.infomodule())

出力:

meeting at 10:00 am.

モジュールからメソッド/クラスをインポートする

このエラーを修正する別の方法は、モジュールからクラスをインポートしてそのオブジェクトを作成することです。

ここでは、socket モジュールからクラス socket をインポートし、そのオブジェクトを作成しました。

コード例:

# Python 3.x
from socket import socket

socket()

出力:

<socket.socket fd=876, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>

カスタムモジュールの場合も同じ手順に従います。 ここでは、モジュールからメソッドをインポートして呼び出しました。

コード例:

# Python 3.x
from infomodule import infomodule

print(infomodule())

出力:

meeting at 10:00 am.