この単純なpythonスクリプトを実行しようとするとエラーが発生します。
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
「dude」と入力したとします。エラーは次のとおりです。
line 1, in <module>
input_variable = input ("Enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'dude' is not defined
私はMac OS X 10.9.1を実行しています、そして私はスクリプトを実行するためにpython 3.3のインストールに付属のPython Launcherアプリを使用しています。
編集:私はどういうわけか私は2.7でこれらのスクリプトを実行していることに気づきました。私は本当の質問は私がどのように私が私のスクリプトをバージョン3.3で動かすべきであるかということであると思いますか?私のスクリプトをアプリケーションフォルダのPython 3.3フォルダ内にあるPython Launcherアプリの上にドラッグアンドドロップすると、3.3を使用してスクリプトを起動できると思いました。私はこの方法でも2.7でスクリプトを起動すると思います。では、どうやって3.3を使うのですか?
TL; DR
Python 2.7のinput
関数は、入力したものがPython式として評価されます。単に文字列を読みたいのであれば、Python 2.7のraw_input
関数を使ってください。これは読み込んだ文字列を評価しません。
Python 3.xを使用している場合、raw_input
はinput
に名前が変更されました。 Python 3.0リリースノートの引用 、
raw_input()
はinput()
に改名されました。つまり、新しいinput()
関数はsys.stdin
から行を読み取り、末尾の改行を取り除いてそれを返します。入力が途中で終了した場合、EOFError
が発生します。input()
の古い動作を取得するには、eval(input())
を使います。
Python 2.7 では、ユーザー入力を受け付けるために使用できる2つの関数があります。 1つは input
、もう1つは raw_input
です。次のようにそれらの間の関係を考えることができます
input = eval(raw_input)
これをよりよく理解するために、次のコードを検討してください。
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
input
はユーザーから文字列を受け取り、現在のPythonコンテキストで文字列を評価します。入力としてdude
を入力すると、dude
が値thefourtheye
にバインドされているため、評価結果はthefourtheye
になり、それがinput_variable
に割り当てられます。
現在のPythonコンテキストにはない何か他のものを入力した場合、それは失敗しますNameError
。
>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined
Python 2.7のinput
に関するセキュリティ上の考慮事項:
どんな種類のユーザが評価されても、セキュリティ上の問題もあります。たとえば、os
モジュールをimport os
を使用してプログラムに既にロードしている場合、ユーザーは次のように入力します。
os.remove("/etc/hosts")
これはpythonによる関数呼び出し式として評価され、実行されます。 Pythonを昇格した権限で実行している場合、/etc/hosts
ファイルは削除されます。なるほど、それはどれほど危険なのでしょうか。
これを実証するために、input
関数をもう一度実行してみましょう。
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
さて、input("Enter your name: ")
が実行されるとき、それはユーザ入力を待ちます、そして、ユーザ入力は有効なPython関数呼び出しであり、そしてそれもまた呼び出されます。 Enter your name again:
プロンプトが再び表示されるのはそのためです。
だから、あなたはraw_input
関数のほうがいいでしょう、このように
input_variable = raw_input("Enter your name: ")
結果を他の型に変換する必要がある場合は、適切な関数を使用してraw_input
によって返される文字列を変換できます。たとえば、入力を整数として読み込むには、 this answer に示すようにint
関数を使用します。
python 3.x には、ユーザー入力を取得する関数が1つだけあり、それは input
と呼ばれます。これはPython 2.7のraw_input
と同等です。
Python 3ではなくPython 2を実行しています。これをPython 2で機能させるには、raw_input
を使用します。
input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)
あなたはPython 3.xのために書いているので、あなたはあなたのスクリプトを始めたいと思うでしょう:
#!/usr/bin/env python3
あなたが使用する場合:
#!/usr/bin/env python
デフォルトはPython 2.xです。 #で始まるものがない場合、これらはスクリプトの最初の行に移動します。 (別名Shebang).
あなたのスクリプトがただで始まるなら:
#! python
それからあなたはそれをに変更することができます:
#! python3
この短いフォーマットは、ランチャーなどのいくつかのプログラムでしか認識されないため、最良の選択ではありません。
最初の2つの例はもっと広く使われており、あなたのコードがPythonがインストールされているどのマシンでも動作することを保証するのに役立ちます。
あなたはpython-2.7を使っているのでraw_input
を使うべきです。変数にinput()
を使用すると(例:s = input('Name: ')
)、変数に記述した内容(s
)を保存せずにPython環境でコマンドを実行し、記述した内容が定義されていない場合はエラーを生成します。
raw_input()
はあなたが変数に書いたものを正しく保存するでしょう(例えば:f = raw_input('Name : ')
)、そしてそれはいかなる可能なエラーも作成することなしにPython環境でそれを実行しません:
input_variable = raw_input('Enter Your Name : ')
print("Your Name Is : " + (input_variable))
Python 3以降の場合
s = raw_input()
それはpycharm IDE上の問題を解決するでしょうあなたが正確にオンラインサイトで解決しているならそれからそれを使用してください:
s = input()
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
一重引用符または二重引用符のどちらかで入力を入力する必要があります
Ex:'dude' -> correct
dude -> not correct
どちらでもできます。
x = raw_input("enter your name")
print "your name is %s " % x
または
x = str(input("enter your name"))
print "your name is %s" % x
python 2とpython 3 の両方で動作する以下を使用しています。
#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Enter your name: "))
この問題に遭遇する可能性のある他の誰にとっても、スクリプトの先頭に#!/usr/bin/env python3
を含めても、ファイルが実行可能でない場合はShebangは無視されます。
ファイルが実行可能かどうかを確認するには
./filename.py
を実行します。-bash: ./filename.py: Permission denied
が出たら、chmod a+x filename.py
を実行してください。./filename.py
をもう一度実行してくださいKevinが示唆したようにimport sys; print(sys.version)
をインクルードしたことがあれば、スクリプトはpython3によって解釈されていることがわかります。
IDEで使用しているPythonを変更することができます。Python3.xをすでにダウンロードしている場合は、切り替えがそれほど難しくないはずです。しかし、あなたのスクリプトはpython 3.xではうまく動きます。
print ("your name is" + input_variable)
に
print ("your name is", input_variable)
なぜならカンマでそれはyour name is
とユーザーが入力したものは何でもの間に空白で印刷するからです。また、2.7を使用している場合は、入力の代わりにraw_input
を使用してください。
私はまた、Python 2.7および3.7と互換性があるはずのモジュールでこの問題に遭遇しました。
私は問題を解決するために見つけたものはインポートしていました:
from six.moves import input
これは両方のインタプリタの使いやすさを修正しました
6つの図書館についてもっと読むことができます ここ
以前のものに良い貢献を。
import sys; print(sys.version)
def ingreso(nombre):
print('Hi ', nombre, type(nombre))
def bienvenida(nombre):
print("Hi "+nombre+", bye ")
nombre = raw_input("Enter your name: ")
ingreso(nombre)
bienvenida(nombre)
#Works in Python 2 and 3:
try: input = raw_input
except NameError: pass
print(input("Your name: "))
あなたの名前を入力してください。ジョー
ありがとうございます。