Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python TypeError:「モジュール」オブジェクトは呼び出し可能ではありませんソリューション

Pythonモジュールは、特に独自のモジュールを定義する場合、混乱を招きます。 「TypeError:「モジュール」オブジェクトは呼び出せません」は、Python開発者がクラスを操作するときに犯す最も一般的な間違いの1つです。

このガイドでは、このエラーの意味と、エラーが発生する理由について説明します。このエラーを克服するのに役立つサンプルコードスニペットについて説明します。始めましょう!

問題:TypeError:「モジュール」オブジェクトを呼び出せません

Pythonファイルは、拡張子「.py」で終わる限り、モジュールです。

モジュールは、メインプログラムの外部で関数、変数、およびクラスを定義できるため、Pythonの重要な部分です。これは、コードを複数のファイルに分割して、より効果的に分類できることを意味します。

モジュールは特定の方法でインポートする必要があります。それ以外の場合、Pythonはエラーを返します:

TypeError: 'module' object is not callable

これは、モジュールを関数としてインポートしようとしたときに発生します。

シナリオ例

「ケーキ」と呼ばれるモジュールを定義します。このモジュールには、read_fileという1つの関数が含まれています。 read_file関数は、テキストファイルの内容を読み取ります。

ファイル名によってモジュールの名前が決まります。モジュールを「cakes」と呼びたいので、cakes.pyというファイルにコードを記述します。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

def read_file():
	all_cakes = []
	with open("cakes.txt", "r") as cake_file:
		cake_list = cake_file.readlines()
		for c in cake_list:
			all_cakes.append(c.replace("\n", ""))

	return all_cakes

この関数は、「cakes.txt」というファイルの内容を読み取ります。次に、ファイル内のテキストのすべての行を繰り返し処理し、各行を「all_cakes」というリストに追加します。

replace()メソッドは、改行(“ \ n”)文字を空の値に置き換えるために使用されます。これにより、すべての新しい行が削除されます。関数の最後に「all_cakes」を返します。

次に、app.pyというファイルを開き、次のコードを貼り付けます。

import cakes

cake_list = cakes()
print(cake_list)

このコードは、「cakes」モジュールを使用して「cakes.txt」ファイルの内容を読み取ります。次に、関数がファイル内で見つけたすべてのケーキを出力します。

コードを実行してみましょう:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
	cakes = cakes()
TypeError: 'module' object is not callable

コードはエラーを返します。

ソリューション

app.pyファイルのimportステートメントを見てみましょう。

import cakes

モジュール「ケーキ」をインポートします。これには、「cakes.py」ファイルで宣言するすべての変数、クラス、および関数が含まれています。

それでは、次のコード行を見てみましょう。

cake_list = cakes()

「ケーキ」モジュールには1つの関数しか含まれていませんが、その関数が何であるかは指定していません。 Pythonはどの関数で動作するかわからないため、これはPythonを混乱させます。

このエラーを解決するために、モジュール自体ではなく、参照する関数の名前を呼び出します。

import cakes

cake_list = cakes.read_file()
print(cake_list)

コードをもう一度実行してみましょう。

['Cinnamon Babka', 'Chocolate Cupcake']

私たちのコードはケーキのリストを正常に返します。

app.pyファイルでは、cakes.read_file()を呼び出します。

Pythonは、「cakes」モジュールが格納されているファイル「cakes.py」を調べて、read_file()を見つけます。 関数。次に、Pythonはその関数を実行します。

read_file()の結果を割り当てます 「cake_list」と呼ばれる変数への関数。次に、そのリストをコンソールに出力します。

または、read_file関数をプログラムに直接インポートします。

from cakes import read_file

cake_list = read_file()
print(cake_list)

私たちのコードは次を返します:

['Cinnamon Babka', 'Chocolate Cupcake']

私たちのコードはread_file()を実行します 「ケーキ」モジュールからの機能。この例では、「cakes」モジュール全体をインポートします。そうする代わりに、「cakes」モジュールから1つの関数read_fileをインポートします。

read_fileをインポートするときに、cakes.read_file()を使用する必要がなくなったことに注意してください。 関数を呼び出します。 read_file()を使用します read_file()をインポートするため コードに直接機能します。



結論

Pythonモジュールのコードは別のファイルにあります。モジュールから関数と値をインポートする方法はいくつかあり、混乱するのは簡単です。

モジュールを操作するときは、正しくアクセスする関数、クラス、および変数を参照していることを確認してください。モジュール自体を呼び出すのではなく、関数を参照する場合は、モジュールから呼び出す正確な関数を指定する必要があります。

これで、プロの開発者のようにこのPythonTypeErrorを解決する準備が整いました。


  1. TypeError:「undefined」はJavaScriptのオブジェクトではありません

    「TypeError:「未定義」はオブジェクトではありません」エラーは、プロパティがアクセスされたとき、またはメソッドが未定義のオブジェクトで呼び出されたときに発生します。このエラーは、Safariブラウザでのみ表示されます。 以下はTypeErrorのコードです-「undefined」はJavaScriptのオブジェクトエラーではありません- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name=

  2. Pythonプログラムのcallable()

    このチュートリアルでは、組み込みメソッド callable()について説明します。 。 1つの引数を取り、その引数が呼び出し可能であるかどうかを返します。 か否か。関数やクラスを取得すると、それらを呼び出すことができます。整数、浮動小数点数、文字列などの定数は呼び出しできません。 例 いくつかの例を見てみましょう。 # definition def even(n):    return True if n % 2 == 0 else False # checking whether even() is callable or not print(callable(ev