eval()解析时出现意外的EOF

时间:2015-04-08 22:26:20

标签: python

所以我试图获得两个输入,用信用小时分隔用户名,每次我退出循环后都会出现意外的EOF。

fresh = []
soph = []
jun = []
sen = []

def classify(cr, un):
     if cr <= 27:
         fresh.append(un)
         print(un, 'is a freshman.\n')
     elif 28 <= cr <= 56:
         soph.append(un)
         print(un, 'is a sophomore.\n')
     elif 57 <= cr <= 84:
         jun.append(un)
         print(un, 'is a junior.\n')
     elif cr >= 85:
         sen.append(un)
         print(un, 'is a senior\n')


def main():

     un = input('Student: ')
     cr = eval(input('Credits: '))
     while un and cr != '':
         un = input('Student: ')
         cr = eval(input('Credits: '))
         classify(cr, un)

具体而言,我得到的错误是:

File "./class.py", line 58, in <module>
  main()
File "./class.py", line 51, in main
  cr = eval(input('Credits: '))
File "<string>", line 0

我不确定它是否相关(或者它是否只是我忽略的东西)但我必须通过Credit输入才能退出循环。由于AND运算符,当Student出现时按下回车后是否不应该退出循环?

编辑:添加了classify func。我不认为这是问题,我已经尝试删除它,它仍然让我回到EOF。

1 个答案:

答案 0 :(得分:1)

您不应该使用eval()将字符串转换为整数。请改用int

def main():

    un = input('Student: ')
    cr = input('Credits: ')
    classify(int(cr), un)
    while un and cr:
        un = input('Student: ')
        cr = input('Credits: ')
        classify(int(cr), un)

即使在跳过学生姓名后仍必须输入学分,因为while条件仅在进入代码块之前评估,而不是在块中的每个语句之后评估。如果您希望在用户跳过学生或学分值时立即停止,请执行以下操作:

def main():

    while 1:
        un = input('Student: ')
        if not un: break
        cr = input('Credits: ')
        if not cr: break
        classify(int(cr), un)

当然,对Python 3使用input,对Python 2使用raw_input