web-dev-qa-db-ja.com

SyntaxError無効なトークン

変数に値を割り当てようとすると問題が発生します。この問題は、日付をタプルまたはリストとして次の順序で配置しようとすると発生します:year, month, day.

>>> a = (2016,04,03)         # I try to put the date into variable 'a' as a Tuple.
SyntaxError: invalid token
>>> a = [2016,04,03]         # I try to put the date into variable 'a' as a list.
SyntaxError: invalid token
  1. なぜこれが起きているのですか?

  2. どうすれば修正できますか?

  3. Pythonでのトークンの意味は何ですか?

30
zerocool

Python 3では、数字に先行ゼロを使用することはできません。例えば:

05
0123

などは許可されていませんが、代わりに5および123と記述する必要があります。

ただし、Python 2では、先行ゼロは数値が8進数(8進数)であることを意味するため、04または03はそれぞれ、8進数で4および3を意味しますが、08は有効な8進数ではないため無効です。

Python 3では、オクタルの構文は次のように変更されました。

0o10
0o4

0bまたは0xプレフィックスを使用して、バイナリや16進数などの他のベースを許可します。)

他の質問に関しては、Pythonのトークンは、Pythonインタープリターがコードをチャンクに分割する方法で、理解できるようにします( here を参照) =)。ここで、トークナイザーがコードを分割しようとすると、そこにゼロが表示されるとは想定されないため、エラーがスローされます。

(他の回答と同様に)先行ゼロを削除する((2016,4,3))か、文字列を使用してこれらを表す(("2016","04","03"))ことをお勧めします。

49

04は、Python 2.xの有効な整数リテラルです。 8進数(8進数)の数値として解釈されます。 09は有効な8進数ではないため、9も無効なトークンになります。

Python 3では、8進リテラルの形式が変更されました。先行ゼロだけでは無効になります。ベースを明示的に指定する必要があります。たとえば、0o1210と同じです。

あなたの場合、おそらく先頭の0を削除したいでしょう:a = (2016, 4, 3)。先行ゼロを明示的に保存するのではなく、必要に応じてタプルの文字列表現に追加できます。

14
chepner

問題は4の前の0です。そのような情報を保存する場合は、文字列を使用してみてください。

a = (2016,04,03) --> Error
a = (2016,4,3) --> No Error
a = ("2016","04","03") --> No Error
a = "2016-04-03" --> you could retrieve Year, Month and Day by splitting this string

Python 2.x 04では、8進数として解釈されます。 Pythonでは、次のように3つの8進数が0o4の形式で書き込まれます。 http://docs.python.org/3.0/whatsnew/3.0.html#integers

2
vinx.py

pythonバージョン2.7では、数字の前に0を使用するとエラーが発生し、その数字は8進数システムでは無効です。たとえば08または09を使用すると、同じエラー「無効なトークン」が発生します。

Pythonインタープリターはスクリプト全体をさまざまな部分に分割し、それらの部分はトークンと呼ばれます。ここで、08はトークンと見なされるため、この数値システムでは8進数で無効なので、この種のエラーが発生します。

A = 04のような単純なステートメントを実行して、結果に言及してみてください。タプルまたはリストの使用中にのみ機能し、失敗する場合は、特定のpythonバージョンの問題である可能性があります。動作しない場合は、マシンの構成に問題があります。この場合、古いバージョンを使用している場合は、pythonバージョンをアップグレードできます。

2
Piyush