구문 분석 중 Python 예기치 않은 EOF


82

다음은 내 파이썬 코드입니다. 누군가가 나에게 무엇이 잘못되었는지 보여줄 수 있습니까?

while 1:
date=input("Example: March 21 | What is the date? ")
if date=="June 21":
    sd="23.5° North Latitude"
if date=="March 21" | date=="September 21":
    sd="0° Latitude"
if date=="December 21":
    sd="23.5° South Latitude"
if sd:
    print sd

그리고 다음과 같은 일이 발생합니다.

>>> 
Example: March 21 | What is the date? 
Traceback (most recent call last):
  File "C:\Users\Daniel\Desktop\Solar Declination Calculater.py", line 2, in <module>
    date=input("Example: March 21 | What is the date? ")
  File "<string>", line 0

   ^
SyntaxError: unexpected EOF while parsing
>>> 

답변:


122

:) raw_input대신 사용input

를 사용 input하면 입력 한 데이터가 Python 표현식 으로 해석됩니다. 즉, gawd가 대상 변수의 객체 유형과 생성 할 수있는 광범위한 예외를 알고 있다는 것을 의미합니다. 당신이해야한다 그래서 NOT 사용 input임시 테스트를 위해 뭔가를 넣어하지 않는 한, 단지 파이썬 표현식에 대해 조금 아는 사람에 의해 사용된다.

raw_input항상 문자열을 반환합니다. 왜냐하면 항상 입력하는 것이기 때문입니다. ...하지만 원하는 특정 유형으로 쉽게 변환하고 발생할 수있는 특정 예외를 포착 할 수 있습니다. 그 설명을 통해 어떤 것을 사용해야하는지 아는 것은 당연한 일입니다.

참고

참고 : 이것은 Python 2에만 해당됩니다. Python 3의 경우 raw_input()일반화되었으며 input()Python 2 input()가 제거되었습니다.


그것은 나를 위해 일했습니다! 그러나, 나는이 ... 파이썬 3를 설치 한 경우에도, 내 리눅스 민트 18.3 설치가 파이썬이 실행되는 이유를 잘 모르겠어요
Bajiru

1
Mint 18.3 (및 기반이되는 Ubuntu Xenial) /usr/bin/python에서는 python 2 실행 파일이며 /usr/bin/python3python 3 실행 파일입니다. Mint 19에서 시스템 기본 파이썬은 파이썬 3이라고 믿습니다.
simon jul

16

들여 쓰기! 먼저. 그것은 당신의 SyntaxError.

그 외에도 프로그램에는 몇 가지 다른 문제가 있습니다.

  • raw_input문자열을 입력으로 받아들이고 싶을 때 사용 합니다. input파이썬 표현식 만 취하고 그것에 대해 eval수행합니다.

  • .NET과 같은 스크립트에서 특정 8 비트 문자를 사용하고 있습니다 . # -*- coding:latin-1 -*-일반적으로 코딩 쿠키라고 하는 줄을 사용하여 스크립트 상단에서 인코딩을 정의해야 할 수 있습니다 .

  • 또한 str 비교를 수행하는 동안 문자열을 정규화하고 비교하십시오. (lower ()를 사용하는 사람들) 이것은 사용자 입력에 약간의 유연성을 제공하는 데 도움이됩니다.

  • 또한 Python 튜토리얼을 읽는 것이 도움이 될 것이라고 생각합니다. :)

샘플 코드

#-*- coding: latin1 -*-

while 1:
    date=raw_input("Example: March 21 | What is the date? ")
    if date.lower() == "march 21":

    ....

좋아요, 그것은 구문 오류였습니다. 이제 다른 실수를 수정하겠습니다.
Senthil Kumaran

1
루프의 본문은 들여 쓰기됩니다. 들여 쓰기는 파이썬의 문장을 그룹화하는 방식입니다. 대화 형 프롬프트에서 들여 쓴 각 줄에 대해 탭이나 공백을 입력해야합니다.
제레미 A. 웨스트

6

줄에 닫는 괄호가 누락되어이 오류가 발생했습니다.

나는 invalid syntax (<string>, line ...)? 스크립트의 끝에서 다음 과 같은 줄에 문제가 발생하기 시작했습니다 .

그 줄을 삭제 한 다음 EOF 메시지를 받았습니다.


4

@simon의 답변은 Python 2에서 가장 유용하지만 raw_inputPython 3에는 존재하지 않지만 코드가 Python 2와 Python 3에서 똑같이 잘 작동하는지 확인하려면 다음을 수행하는 것이 좋습니다.

첫째, pip install future :

$ pip install future

둘째 : future.builtins에서 입력 가져 오기

# my_file.py    
from future.builtins import input
str_value = input('Type something in: ')

위에 나열된 특정 예의 경우 :

# example.py
from future.builtins import input
my_date = input("Example: March 21 | What is the date? ")

4

다음 코드를 사용하여 Python 2 및 3 호환성을 얻고 있습니다.

if sys.version_info < (3, 0):
    input = raw_input

3

나는 일반적 으로이 질문과 관련이없는 대답을하려고합니다.이 오류는 일반적으로 구문을 절반으로 나누고 다른 절반을 잊을 때 발생합니다. 내 경우와 마찬가지로 :

try :
 ....

파이썬은

except Exception as e:
 ....

그러나 EOF (파일 끝)가 발생하여 오류가 발생했습니다. 코드에서 불완전한 구문을 찾을 수 있는지 확인하십시오.


1

나는 똑같은 것을 보았고 문제가 무엇인지 알아 냈습니다. 메소드 입력을 사용할 때 입력해야하는 응답은 큰 따옴표로 묶어야합니다. 당신의 라인처럼 date=input("Example: March 21 | What is the date? ")

콘솔 "12/12/2015"에 메시지가 표시되면 입력해야합니다 ". 이전과 이후를 기록해 두십시오 . 이렇게하면 문자열로 받아 예상대로 처리됩니다. 이것이이 input방법의 한계인지 확실하지 않지만,이 방법으로 작동합니다.

도움이되기를 바랍니다.


1

첫 번째 if 문 뒤에 "if"를 입력하는 대신 "elif"를 입력하면 작동합니다.

전의.

`    while 1:
    date=input("Example: March 21 | What is the date? ")
if date=="June 21":
    sd="23.5° North Latitude
elif date=="March 21" | date=="September 21":
    sd="0° Latitude"
elif date=="December 21":
    sd="23.5° South Latitude"
elif sd:
    print sd `

0

시도해 볼 수있는 것은 일반 input명령을 사용하여 파이썬에 대해 정상적으로 코드를 작성하는 것 입니다. 그러나 트릭은 프로그램 시작 부분에 명령을 추가하는 것 input=raw_input입니다.

이제해야 할 일은 Python / IDLE 또는 터미널에서 실행 중인지 여부에 따라 비활성화 (또는 활성화)하는 것입니다. 필요할 때 단순히 '#'을 추가하면됩니다.

Python / IDLE에서 사용하기 위해 꺼졌습니다.

    #input=raw_input 

그리고 물론 터미널에서 사용하기 위해 켜졌습니다.

    input=raw_input 

항상 작동할지 확실하지 않지만 간단한 프로그램이나 스크립트에 대한 가능한 솔루션입니다.


-2

함수의 모든 매개 변수 가 호출되기 전에 정의 되었는지 확인하십시오 . 나는 Kaggle을 연습하면서이 문제에 직면했습니다.

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