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

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

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
>>> 



답변

🙂 raw_input대신 사용input

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

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

참고

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


답변

들여 쓰기! 먼저. 그것은 당신의 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":

    ....


답변

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

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

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


답변

@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? ")


답변

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

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


답변

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

try :
 ....

파이썬은

except Exception as e:
 ....

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


답변

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

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

도움이되기를 바랍니다.