Python에서“SyntaxError : 'print'호출시 괄호가 없음”은 무엇을 의미합니까?


389

print파이썬에서 명령문 을 사용하려고하면 다음과 같은 오류가 발생합니다.

>>> 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에서는 작동하지 않습니다. Python 3에서는 인쇄 할 값 주위에 괄호를 추가해야합니다.

print("Hello, World!")

“SyntaxError : 'print'를 호출 할 때 괄호가 누락되었습니다 ' 는 Python 3을 실행하는 동안 Python 2 자습서를 따르려고하는 사용자를 돕기 위해 Python 3.4.2에 추가 된 새로운 오류 메시지입니다.

Python 3에서 인쇄 값은 고유 한 명령문에서 일반 함수 호출로 변경되었으므로 이제 괄호가 필요합니다.

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

이전 버전의 Python 3에서 인터프리터는 무엇이 잘못 될 수 있는지에 대한 유용한 힌트를 제공하지 않고 일반적인 구문 오류를보고합니다.

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

에 관해서는 이유 print 가 아니라 당신이 후행 공백과 표준 에러에 여러 항목을 인쇄하는 것이 아니라 선을 끝처럼 많은 일을 복잡하게했던 방법, 문장의 기본 형태에 관련되지 않은 파이썬 3의 일반적인 기능이되었다.

파이썬 2에서 :

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

파이썬 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!")?

"인쇄 호출에 누락 된 괄호"사례는 컴파일 시간 구문 오류이므로 원시 소스 코드에 액세스 할 수 있으므로 제안 된 대체의 나머지 행에 전체 텍스트를 포함 할 수 있습니다. 그러나 현재 해당 표현 주위에 따옴표를 사용하여 시도하지는 않습니다 (불가능하지 않고 충분히 복잡하지 않습니다).

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

또한 커뮤니티 위키에 대한 답변을 전환했습니다. 이에 대한 추가 SO 담당자를 꾸준히 축적하는 것은 나에게 맞지 않습니다 ( 오류 메시지 와이 SO 질문이 어떻게 발전했는지 에 대한 배경 은 bugs.python.org/issue21669 참조 )
ncoghlan

4
여보세요! 이 도구는 다른 사람의 도움을 수 있다고 생각 docs.python.org/2/library/2to3.html을
Jhonatas Kleinkauff

1
2.7 파일 에서 향후 import print_function 의 행 을 추가하여 코드에 새 python 3 print () 행을 추가하십시오. 따라서 코드는 2.7+ 및 3.0+와 호환됩니다.
MasterControlProgram

시스템에서 Python 2.7 vs 3을 사용하도록하려면 어떻게합니까? 아마도 이것은 좋은 곳입니다.
Praxiteles

25

불행히도, 오래된 xkcd 만화 는 더 이상 완전히 최신 상태가 아닙니다.

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

파이썬 3.0부터 다음과 같이 작성해야합니다 :

print("Hello, World!")

그리고 누군가는 여전히 그 antigravity라이브러리 를 작성해야 합니다 :(


6
반 중력은 있지만 ... 가져 오기를 시도 했습니까? ;)
tyrion


18

Python 2에서 Python 3으로 구문이 변경되었습니다. Python 2에서

print "Hello, World!" 

작동하지만 Python 3에서는 괄호를 다음과 같이 사용하십시오.

print("Hello, World!")

이것은 스칼라와 동일하며 Java에 가깝습니다.


4

코드가 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=', ')

그 수입으로도 Python3에서 저에게 효과가 없었습니다. 코드에는 괄호가 없습니다.
로직 블로크

3

Python 3에서는 다음과 같이 만 인쇄 할 수 있습니다.

print("STRING")

그러나 파이썬 2에서는 괄호가 필요하지 않습니다.


3

기본적으로 Python 3.x부터 print괄호와 함께 사용해야 합니다.

Python 2.x : print "반지의 제왕"

Python 3.x : print ( "반지의 제왕")


설명

print이었다 2.X는 하지만 A의 기능3.X . 여기에는 여러 가지 좋은 이유가 있습니다.

  1. Python 3.x의 함수 형식을 사용하면 쉼표로 구분하여 여러 항목을 인쇄 할 때 더 많은 유연성이 제공됩니다.
  2. 명령문에 인수 스플래 팅을 사용할 수 없습니다. 3.x에서 구분 기호로 인쇄 할 항목 목록이있는 경우 다음을 수행 할 수 있습니다.
>>> items = ['foo', 'bar', 'baz']
>>> print(*items, sep='+') 
foo+bar+baz
  1. 문장을 무시할 수 없습니다. 인쇄 동작을 변경하려면 함수일 때 수행 할 수 있지만 명령문 일 때는 수행 할 수 없습니다.

2

나는 또한 그냥 사이의 구문 변화에 대한 모든 것을 알고 있었다는 것을 추가 할 수 Python2.7Python3, 내 코드를 제대로으로 작성되었습니다 print("string")심지어 print(f"string")...

그러나 디버깅 시간이 지나면 bash 스크립트가 다음과 같이 python을 호출한다는 것을 알았습니다.

파이썬 file_name.py

이것은 기본적으로 내 파이썬 스크립트를 호출하는 효과 python2.7가있어 오류가 발생했습니다. 그래서 bash 스크립트를 다음과 같이 변경했습니다.

python3 file_name.py

다음 중 python3을 사용하여 오류를 수정 한 스크립트를 실행합니다.


또한 파일 맨 위에 shebang을 추가하여 파일을로드 할 Python을 명시 할 수 있습니다.
OneCricketeer

좋은 생각입니다!
알파 브라보

1

여기에 직접 답변을 제외하고는 파이썬 2와 3의 다른 주요 차이점에 주목해야합니다. 공식 파이썬 위키 는 거의 모든 주요 차이점을 다루며 버전 중 하나를 사용해야 할 때에 중점을 둡니다. 이 블로그 게시물 은 현재 파이썬 우주와 어떻게 든 파이썬 3으로 이동하는 해결되지 않은 퍼즐을 설명하는 훌륭한 작업을 수행합니다.

내가 알 수있는 한, 당신은 파이썬 언어를 배우기 시작했습니다. 파이썬 3 경로를 계속 진행하기 전에 위에서 언급 한 기사를 고려해야합니다. 구문 중 일부를 변경해야 할뿐만 아니라 어떤 패키지를 사용할 수 있는지 (python 2의 이점) 코드에서 만들 수있는 잠재적 인 최적화 (python 3의 장점)도 고려해야합니다. .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.