ホームページ > バックエンド開発 > Python チュートリアル > Python 入力関数で「NameError: name '...' is not generated」というメッセージがスローされるのはなぜですか?

Python 入力関数で「NameError: name '...' is not generated」というメッセージがスローされるのはなぜですか?

Patricia Arquette
リリース: 2025-01-01 05:35:10
オリジナル
245 人が閲覧しました

Why Does My Python Input Function Throw a

入力関数エラーの解決: 'NameError: name '...' が定義されていません

Python の入力関数、特にバージョン3.x より前のバージョンでは、ユーザー入力を処理するときに特有の課題が生じていました。 「NameError: name '...'' が定義されていません」というエラーが発生するのは、input の評価の性質に起因します。

Python 2.7 では、input はユーザー入力を受け入れるだけでなく、入力をユーザー入力として評価します。パイソン表現。これは、「dude」などの変数名を入力すると、input はそれをプログラム内のバインドされた変数として解釈しようとすることを意味します。そのような変数が存在しない場合、エラーが発生します。

Python 2.7 の入力の落とし穴を回避する

この潜在的なセキュリティ上の危険を回避するには、raw_input への切り替えを検討してください。 Python 3.x の input の前身。 raw_input は、ユーザー入力を実行せずに読み取るだけです。

Python 3.x では、input は実質的に raw_input を置き換え、同じ機能を提供します。ただし、Python 3.x のドキュメントでは、古い入力動作が必要な場合は eval(input()) を使用できると警告しています。

区別を理解する

To input と raw_input の違いを説明します。次の Python 2.7 について考えてみましょう。 code:

dude = "thefourtheye"
input_variable = input("Enter your name: ")
ログイン後にコピー

入力として「dude」と入力すると、dude はプログラム内で定義された変数であるため、input_variable には値「thefourtheye」が割り当てられます。

これを次と比較してください。 code:

input_variable = raw_input("Enter your name: ")
ログイン後にコピー

この場合、input_variable には文字列 "dude" 自体が割り当てられます。

セキュリティに関する考慮事項

Python 2.7 の入力の評価機能により、セキュリティ上の懸念が生じます。たとえば、os モジュールがインポートされており、ユーザーが「os.remove('/etc/hosts')」と入力すると、関数呼び出しとして実行されます。これらのリスクを軽減するには、ユーザー入力が誤ってコードとして評価されないように、常に raw_input の使用を検討してください。

以上がPython 入力関数で「NameError: name '...' is not generated」というメッセージがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート