2017-11-09 8 views
0

私のシステムにインストールされているPythonのバージョンです。どういうわけかpython print(09)がSyntaxErrorを与える理由:無効なトークンですが、print(07)は使用できませんか?

Python 2.7.14 |Anaconda, Inc.| (default, Oct 16 2017, 17:29:19) 
[GCC 7.2.0] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 

、08、09、8、9しかし、他の数の仕事で

>>> print(02) 
2 
>>> print(09) 
    File "<stdin>", line 1 
    print(09) 
     ^
SyntaxError: invalid token 
>>> print(08) 
    File "<stdin>", line 1 
    print(08) 
     ^
SyntaxError: invalid token 
>>> print(07) 
7 

だけでなく、印刷を理解していないが、datetime.dateもにSyntaxErrorに

>>> import datetime 
>>> datetime.date(2017,11,09) 
    File "<stdin>", line 1 
    datetime.date(2017,11,09) 
         ^
SyntaxError: invalid token 
>>> datetime.date(2017,11,04) 
datetime.date(2017, 11, 4) 
>>> 
+2

整数リテラル '07'は、[* 8進*表記](https://en.wikipedia.org/wiki/Octal)です。これは、数字が0から7まで(数字を含む)であることを意味する8進数の番号システムです。 –

答えて

3

整数を投げます0で始まり、xまたはbが付いていないPython 2.xのリテラルは、octal literalsです(今後の互換性のため、接頭辞は、8進数のリテラルを意味し、Py3で受け入れられる唯一の形式です。すべて "plain" 0接頭辞はintリテラルで、8進数の構文を試してみてください。オクタルは0から7までの数字しか持たないので、9は8進数では無意味であり、09は明示的にそれを8進数として解釈するよう要求しているため、エラーとなります。

つまり、intリテラルを先頭に0で埋めてください。外観だけでなく、意味も変えます。

+0

私はPython 3でこれを修正して、倍精度化して先行ゼロを完全に無効にするのではなく、基本指定文字なしでこれを修正したかったのです。このような広範な人間の大会を無視するのは間違いです。 –

+0

@ MarkRansom:そうした決定を下していないと、元CとPython 2のプログラマーたちは、「os.chmod」と「0777」がなぜ設定されているのか疑問に思うだろうスティッキービットへのファイルパーミッション、ユーザの読み込み、グループ/その他の実行。 :-) – ShadowRanger

+1

Python 3では、今日この問題があります。「0777」は構文エラーです。私は真剣にむしろ無視して先行ゼロを期待する人々の代わりに8進数を期待している人々に対処します。 –

関連する問題