Pythonで「SyntaxError: 'print'の呼び出しで括弧が欠落している」とはどういう意味ですか?


389

printPythonでステートメントを使用しようとすると、次のエラーが発生します。

>>> print "Hello, World!"
  File "<stdin>", line 1
    print "Hello, World!"
                        ^
SyntaxError: Missing parentheses in call to 'print'

どういう意味ですか?

回答:


601

このエラーメッセージは、Python 3を使用して例に従うか、Python 2 printステートメントを使用するプログラムを実行しようとしていることを意味します。

print "Hello, World!"

上記のステートメントはPython 3では機能しません。Python3では、出力する値の前後に括弧を追加する必要があります。

print("Hello, World!")

「SyntaxError: 'print'の呼び出しで括弧が欠落しています」は、主にPython 3.4.2で追加された新しいエラーメッセージで、Python 3の実行中にPython 2チュートリアルを実行しようとしているユーザーを支援します。

Python 3では、値の印刷が個別のステートメントから通常の関数呼び出しに変更されたため、括弧が必要になりました。

>>> print("Hello, World!")
Hello, World!

Python 3の以前のバージョンでは、インタープリターは一般的な構文エラーを報告するだけで、何が問題になっているのかについての有用なヒントを提供していません。

>>> print "Hello, World!"
  File "<stdin>", line 1
    print "Hello, World!"
                        ^
SyntaxError: invalid syntax

なぜ print文の基本的な形にではなく、あなたは、末尾のスペースをstderrに複数のアイテムを印刷するのではなく行を終了するような、より複雑なものをどうやったのかに関係していなかったのPython 3の通常の機能、となりました。

Python 2の場合:

>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6

Python 3の場合:

>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6

2017年9月のPython 3.6.3リリース以降、Python 2.xの印刷構文に関連するいくつかのエラーメッセージが更新され、対応するPython 3.xの対応が推奨されています。

>>> print "Hello!"
  File "<stdin>", line 1
    print "Hello!"
                 ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?

「print to callの括弧がありません」の場合は、コンパイル時の構文エラーであり、未加工のソースコードにアクセスできるため、提案された置換の残りの行に全文を含めることができます。ただし、現在のところ、その式の前後に適切な引用符を付けようとはしていません(不可能ではありません。十分に複雑であるため、実行されていません)。

TypeError右シフト演算子のレイズもカスタマイズされています:

>>> print >> sys.stderr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Did you mean "print(<message>, file=<output_stream>)"?

このエラーは、コンパイル時ではなくコードの実行時に発生するため、未加工のソースコードにアクセスできず、ユーザーが実際に入力したものではなく、提案された置換式でメタ変数(<message>および<output_stream>)を使用します。 。構文エラーの場合とは異なり、カスタム右シフトエラーメッセージのPython式を引用符で囲むのは簡単です。


3
エラーメッセージの原因の詳細な説明に進む前に、質問に直接回答する要約を上部に追加してくれた@ antti-haapalaに感謝します:)
ncoghlan '11年

私はまた、コミュニティウィキへの回答を切り替えました。これについて、SO担当者を着実に蓄積するのは適切ではないと感じたためです(エラーメッセージとこのSO質問がどのように進化したかについての背景については、bugs.python.org / issue21669を参照してください)
ncoghlan

4
こんにちは!このツールは誰かdocs.python.org/2/library/2to3.html
Jhonatas Kleinkauff

1
行を追加しますから、将来の輸入print_functionをあなたのコードに新しいのpython 3プリント()の行を追加するために、あなたの2.7のファイルに。したがって、コードは2.7+および3.0+と互換性があります
MasterControlProgram

どのようにしてシステムにPython 2.7と3を強制的に使用させるのですか?多分これはそれのための良い場所です。
Praxiteles 2017年


18

構文がPython 2からPython 3に変更されました。Python2では

print "Hello, World!" 

動作しますが、Python 3では括弧を次のように使用します

print("Hello, World!")

これはScalaと同等の構文であり、Javaに近い構文です。


4

コードがPython 2とPython 2の両方で機能する場合は、プログラムの最初にこれをロードすることでこれを実現できます。

from __future__ import print_function   # If code has to work in Python 2 and 3!

次に、Python 3の方法で印刷できます。

print("python")

新しい行を作成せずに何かを印刷したい場合-これを行うことができます:

for number in range(0, 10):
    print(number, end=', ')

そのインポートを使用しても、Python3では動作しませんでした。コードには括弧がありません。
logicbloke

3

Python 3では、次の形式でのみ印刷できます。

print("STRING")

ただし、Python 2では、括弧は必要ありません。


3

基本的に、Python 3.x以降は使用する必要があります printでは括弧ます。

Python 2.x:「ロードオブザリング」を印刷する

Python 3.x:print( "Lord of the Rings")


説明

printした声明2.xでは、それはだ機能3.xの。現在、これには多くの正当な理由があります。

  1. Python 3.xの関数形式では、commanで区切られた複数の項目を印刷するときに柔軟性が向上します。
  2. ステートメントでスプラッティング引数を使用することはできません。3.xでは、セパレータを使用して印刷するアイテムのリストがある場合、これを行うことができます。
>>> items = ['foo', 'bar', 'baz']
>>> print(*items, sep='+') 
foo+bar+baz
  1. ステートメントを上書きすることはできません。printの動作を変更したい場合は、関数の場合は変更できますが、ステートメントの場合は変更できません。

2

Python2.7またPython3、との間の構文の変更についてすべて知っていて、コードが正しく、print("string")そしてさらに print(f"string")...

しかし、しばらくデバッグした後、bashスクリプトが次のようにpythonを呼び出していることに気付きました。

python file_name.py

これは、デフォルトでpython2.7whichを使用してpythonスクリプトを呼び出す効果があり、エラーが発生しました。そこで、bashスクリプトを次のように変更しました。

python3 file_name.py

どちらがおおざっぱにエラーを修正したスクリプトを実行するためにpython3を使用します。


ファイルの先頭にシバンを追加して、ファイルをロードするPythonを指定することもできます
OneCricketeer

はい、いい考えです。
アルファブラボー

1

ここでの直接的な回答以外に、Python 2と3の間の他の重要な違いに注意する必要があります。公式のPython Wikiは、ほとんどすべての主要な違いについて説明しており、どちらのバージョンを使用するかについて焦点を当てています。このブログ投稿では、現在のpythonの世界と、Python 3に移行するという、どういうわけか未解決のパズルについて説明しています。

私の知る限り、あなたはPython言語を学び始めています。Python 3ルートを続行する前に、前述の記事を検討する必要があります。構文の一部を変更する必要があるだけでなく、どのパッケージを使用できるか(Python 2の利点)、およびコード内で可能な最適化(Python 3の利点)についても考慮する必要があります。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.