ホームページ >バックエンド開発 >Python チュートリアル >型キャストを繰り返した後、Python コードで「TypeError: 'str' object is not callable」がスローされるのはなぜですか?

型キャストを繰り返した後、Python コードで「TypeError: 'str' object is not callable」がスローされるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-15 20:19:28245ブラウズ

Why Does My Python Code Throw a `TypeError: 'str' object is not callable` After Repeated Typecasting?

型キャストの謎: 2 回目の TypeError の探索

Python コードを扱うとき、一見矛盾しているように見える複雑な TypeError に遭遇することは珍しくありません。 。このような謎の 1 つは、str = str(...) のようなコードを複数回試行するときに発生します。

不可解な問題

次のコード スニペットを考えてみましょう:

def example(parameter):
    global str
    str = str(parameter)
    print(str)

example(1)
example(2)

このコードを実行すると、サンプル関数の最初の呼び出しは問題なく機能します。ただし、2 番目の呼び出しでエラーがトリガーされます。

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    example(2)
  File "test.py", line 3, in example
    str = str(parameter)
TypeError: 'str' object is not callable

説明

この複雑な動作は、グローバル ステートメントの使用に起因します。グローバル変数とローカル変数の複雑さについては詳しく説明しませんが、ここで重要な点は、コードが組み込み str 関数を変更しているということです。

グローバル str を実行すると、事実上、 str のローカル バージョンではなくグローバル バージョン。ただし、その後、グローバル str を文字列として再定義します。 str は Python 言語に不可欠であり、変更すべきではないため、これは問題です。

解決策

この問題を解決するには、グローバル str 変数の再定義を避けるだけです。代わりに、ローカル変数に別の名前を使用し、グローバル ステートメントを削除してください。修正されたコードは次のようになります。

def example(parameter):
    new_str = str(parameter)
    print(new_str)

追加メモ

Python REPL でこのようなコードを使用した場合、割り当てはグローバル str への変更は、さらにアクションを実行するまで保持されます。インタプリタを再起動するか、del str を使用してグローバル str を削除できます。

今後このようなエラーを防ぐには、グローバル変数とローカル変数の間の相互作用を理解することが不可欠です。組み込み Python 関数の変更を慎重に避けることで、コードがスムーズかつ一貫して実行されるようにすることができます。

以上が型キャストを繰り返した後、Python コードで「TypeError: 'str' object is not callable」がスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。