web-dev-qa-db-ja.com

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

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

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

どういう意味ですか?

354
ncoghlan

このエラーメッセージは、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

why printはPython 3では普通の関数になりましたが、これは文の基本形とは関係ありませんでしたが、むしろ複数の項目をstderrに末尾の空白を付けて印刷するようなより複雑なことをした方法とは関係ありません。行末です。

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の呼び出しに括弧がない」の場合はコンパイル時の構文エラーであり、したがって生のソースコードにアクセスできるため、推奨される置換の残りの行にフルテキストを含めることができます。しかし、現在のところ、その表現の周りに適切な引用符を配置することは試みられていません(不可能ではない、それが行われていないことが非常に複雑です)。

右シフト演算子用に上げられた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式を引用符で囲むのは簡単です。

562
ncoghlan

残念ながら、古い xkcdコミック はもう完全に最新のものではありません。

https://imgs.xkcd.com/comics/python.png

Python 3.0からは、次のように書く必要があります。

print("Hello, World!")

そして誰かがまだそのantigravityライブラリ:(を書かなければなりません

19
Christian

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

print "Hello, World!" 

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

print("Hello, World!")

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

14
Sagar balai

あなたのコードがPython 2と3の両方で動くべきなら、あなたはあなたのプログラムの始めにこれをロードすることによってこれを達成することができます:

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=', ')
3
Lukasz

Python 3では、次のようにしか印刷できません。

print("STRING")

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

3
Larry

ここでの直接的な答え以外では、python 2と3の間のもう1つの重要な違いに注意する必要があります。 公式のpython wiki は、ほとんどすべての主な違いについて説明します。 このブログ記事 は現在のpythonの世界とどういうわけかpython 3に移行するという未解決のパズルを説明する素晴らしい仕事をしています。

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

1
Chad Van De Hey