EOFError в питоне

Я получил EOFError в строке 87 следующего кода:

import random
def printDice(diceList):
    upperLine=" _____     _____     _____     _____     _____"
    line1="|" 
    line2="|"
    line3="|"
    lowerLine=" -----    -----    -----    -----    -----"
    for i in range(len(diceList)):
        if(diceList[i]==1):
            line1+="     "
        elif(diceList[i]==2):
            line1+="*    "
        elif(diceList[i]==3):
            line1+="*    "
        elif(diceList[i]==4):
            line1+="*   *"
        elif(diceList[i]==5):
            line1+="*   *"
        else:
            line1+="*   *"
        if(i==4):
            line1+="|"
        else:
            line1+="|  |"
    for i in range(len(diceList)):
        if(diceList[i]==1):
            line2+="  *  "
        elif(diceList[i]==2):
            line2+="     "
        elif(diceList[i]==3):
            line2+="  *  "
        elif(diceList[i]==4):
            line2+="     "
        elif(diceList[i]==5):
            line2+="  *  "
        else:
            line2+="*   *"
        if(i==4):
            line2+="|"
        else:
            line2+="|  |"
    for i in range(len(diceList)):
        if(diceList[i]==1):
            line3+="     "
        elif(diceList[i]==2):
            line3+="    *"
        elif(diceList[i]==3):
            line3+="    *"
        elif(diceList[i]==4):
            line3+="*   *"
        elif(diceList[i]==5):
            line3+="*   *"
        else:
            line3+="*   *"
        if(i==4):
            line3+="|"
        else:
            line3+="|  |"
    print upperLine
    print line1
    print line2
    print line3
    print lowerLine

tellMe="N"
print

print "The purpose of the game is to figure out the rule."
print "I can tell you three things:\n1. The name of the game is petals around a rose,  the name is important.\n2. I can tell you whether or not your guess is right and the score of the dice.\n3. I can tell you that the score is always even or 0"
print
print "At any time you can quit by typing an odd number"
go="Y"
wrongGuesses=0
while(go=="Y"):
    diceList=[]
    score=0
    rightWrong="N"
    for i in range(5):
         diceList.append(random.randrange(1,7))
    for i in range(5):
        if(diceList[i]==3):
            score+=2
        elif(diceList[i]==5):
            score+=4
    printDice(diceList)
    print
    while(rightWrong=="N"):
        guess=input("What is your guess? ")
        if(guess%2==1):
            break
        if(guess!=score):
            print "Wrong"
            wrongGuesses+=1
            tellMe=raw_input("Tell you (Y or N)? ")
            tellMe=tellMe.upper()
            if(tellMe=="Y"):
                print "The score was "+str(score)+"."
                rightWrong="Y"
            else:
                rightWrong="Y"
            print "Right"
    if(wrongGuesses%13==0 and wrongGuesses!=0):
        print"The name is very important."
    if((wrongGuesses==30) and (wrongGuesses!=0)):
        print "The maximum score is 20."
    print

Я использовал сайт codepad.org для запуска этой программы. На самом деле я запустил эту программу в среде IDE, но когда я использую этот сайт, появляется эта ошибка:

Каковы ваши предположения?

Traceback (most recent call last):
  Line 88, in <module>
    guess=input("What is your guess? ")
EOFError

person Spidermaninja    schedule 31.05.2012    source источник
comment
Попробуйте использовать raw_input вместо input. Кроме того, использование ввода небезопасно, поскольку оно оценивает ваш код Python как команды и может привести к тому, что кто-то взломает ваш код.   -  person Florin Stingaciu    schedule 31.05.2012


Ответы (3)


Ваша программа считывает пользовательский ввод со стандартного ввода. При запуске на codepad.org пользовательский ввод отсутствует, и попытка чтения из стандартного ввода приведет к ошибке EOFError.

Если вместо этого вы используете сайт ideone.com, он позволяет указать пользовательский ввод. Однако вам придется вводить все данные заранее, а не в интерактивном режиме. Если ваша программа попытается прочитать за конец предоставленного ввода, вы снова получите EOFError.

person interjay    schedule 31.05.2012

Предполагая, что вы используете Python 2.x, это должно быть:

raw_input

а не input.

raw_input было изменено на input в Python 3.x

person S Singh    schedule 31.05.2012
comment
Это не имеет отношения к EOFError. - person interjay; 31.05.2012
comment
Тем не менее, это правда. input() использует eval(), что делает его очень опасным. - person Rodrigo Queiro; 31.05.2012
comment
@RodrigoQueiro: это правда, но это не ответ на вопрос. - person interjay; 31.05.2012

Технически это не ошибка, а скорее исключение. Это исключение возникает, когда одна из встроенных функций, чаще всего

input()

возвращает Конец файла (EOF) без чтения каких-либо данных. Иногда все, что наша программа пытается сделать, это получить что-то и изменить это. Но если получить данные не удастся, возникнет это исключение.

person Nitish Kumar Pal    schedule 17.10.2018