型キャストの謎: 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 サイトの他の関連記事を参照してください。