pyton3.6で input()がエラーになります。

投稿者: Anonymous

初心者です。
Python3.6.2で以下のinput()がエラーになります。

原因と修正方法をお教えください。

OS:windows10
Version:python3.6.5
(Anaconda3-5.2.0-Windows-x86_64.exeでインストールしました。)

E:workpythonlesson>python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32

test_inpStr.pyをコマンドプロンプトから実行すると

#! python3                    
# -*-coding:utf-8-*-          
print("文字を入力してみよう。") 
x=input()                     
print(x,"が入力されたよ。")

以下のエラーとなります。何故でしょうか???

E:workpythonlesson>test_inpStr.py
文字を入力してみよう。
aaa
Traceback (most recent call last):
  File "E:workpythonlessontest_inpStr.py", line 5, in ?
    x=input()
  File "<string>", line 0, in ?
NameError: name 'aaa' is not defined

解決

x=input() でのエラーについて

予想と反し、実際には Python 2 で実行していることが原因だと思われます。python <ファイル名> で実行するようにしてください。

コマンドプロンプト (cmd.exe) において .py で終わるファイル名のみを打ち込んだ場合、拡張子 .py に関連付けられたアプリケーションによってそのファイルが開かれます。今回の場合、コマンドプロンプトへ単に test_inpStr.py と打ち込んでいるため、関連付けられたアプリケーションによってスクリプトが解釈されています。出ているエラーから判断するに (※1)、おそらく以前どこかのタイミングで .py に Python 2 を関連付けており、Python 2 によってスクリプトが解釈されたのでしょう (※2)。

※1:Python 3 と 2 では input() の挙動が異なり、Python 2 における input() は入力を式として評価してしまうため、今回の NameError が出ます。

※2:Shebang についてご存じであれば、「スクリプトファイル 1 行目の #! python3 によって Python 3 になるのではないの?」と思うかもしれません。しかし shebang は主に UNIX 系のシェルにおける慣習であり、cmd.exe から直接実行する場合は意味がありません。Windows ではPython ランチャーを使っている場合に使われます

ファイルの関連付けを Python 3 へ変更したい場合、metropolis さんがコメントなさった How to execute Python scripts in Windows? をご覧ください。また本当に Python 2 で実行されているのか確かめたい場合、PicoSushi さんがコメントなさっているように import sys; print(sys.version) と書かれたスクリプトを実行するとバージョンが出力されます。

Unicode error について

以下を確認してください。

  • スクリプトファイルが utf-8 という文字コードで保存されているか。
  • スクリプトに全角スペースが混じっていないか。
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *