Python程序带输入的EOF错误

时间:2013-11-30 16:14:43

标签: python

我一直在尝试将我的代码从java转换为python,我遇到了这个问题。我想制作一个日历和我输入的月份和年份的所有内容,我遇到了这个问题,我不知道它意味着什么。

你们可以帮帮我吗?

Traceback (most recent call last):
  File "/Users/macbook/Documents/Untitled.py", line 41, in <module>
    main()
  File "/Users/macbook/Documents/Untitled.py", line 30, in main
    m, y = eval(input("Enter the month, and year (separated by spaces): "))
  File "<string>", line 1
    12 2013
          ^
SyntaxError: unexpected EOF while parsing

我的代码:

#------------------------------------------------------------------------
def isLeapYear():
    if((year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)):
        return true
    else:
        return false

#---------------------------------------------------------------------
def dayOfWeek(mon, day, year):
    if(mon < 3):
        year = year-1

    wy = 3 + year + (year/4) - (year/100) + (year/400)
    wm = int(2.6 * ((mon+9 % 12) +0.5))
    wd = day-1
    return (wd + wm + wy) % 7

#---------------------------------------------------------------------
def daysInMonth(month, year):
    if(month ==4 or month ==6 or month ==9 or month==11):
        return 30
    elif(month==2):
        if(isLeapYear(year)):
            return 29
        else:
            return 28
    else:
        return 31

def main():
    m, y = eval(input("Enter the month, and year (separated by spaces): "))
    print("Sun Mon Tue Wed Thu Fri Sat\n")
    i=0
    while(i<dayOfWeek(m,1,y)):
        print("     ")
        i=i+1

    d=1
    while(d <= daysInMonth(m,y)):
        print(d)
        if(dayOfWeek(m,d,y) == 6):
            print("\n")
        d=d+1

main()

2 个答案:

答案 0 :(得分:2)

eval()只接受有效的Python表达式。 12 2013不是有效的Python表达式。

要么用逗号('12, 2013')分隔数字,要么使用不同的方法解析日期输入。

尽量避免eval()解析输入;意图不太友好的用户可以输入任意代码来搞乱您的程序并在执行此操作时劫持该过程。

以下一行也可以用于您的目的:

m, y = map(int, input("Enter the month, and year (separated by spaces): ").split())

答案 1 :(得分:1)

错误显然在这里:

m, y = eval(input("Enter the month, and year (separated by spaces): "))

您似乎已输入字符串12 2013并要求Python评估它。但是,12 2013在Python中意味着什么(它只是由空格分隔的两个整数)。你可以

  • 在数字12, 2013之间添加一个逗号,它将使用相同的代码
  • 通过两次input
  • 来电询问号码

对于安全问题,您应该实施第二个解决方案。