如何在计算器程序中捕获EOF错误

时间:2013-09-18 20:49:15

标签: python regex python-2.7 calculator eoferror

我正在尝试创建一个计算器。为什么我不能抓住EOF错误?当我输入多个特殊字符时,我的程序崩溃了。例如2 ++

这个问题通常是如何解决的?

提前致谢!

def calcfieldcheck(input):
    return re.match("^[0-9\.\-\/\*\+\%]+$",input)
    #uitzoeken hoe regex nesten


def calculate(input):

    print "Wat moet ik berekenen?"

    counter=0


    while not calcfieldcheck(input):
        if counter > 0:
            print "Je kan alleen getallen en expressies berekenen!"
            input=raw_input("> ")
        else:
            print
            input=raw_input("> ")

        counter=counter+1
        print
        print "je hebt het volgende ingevoerd: ",input

    try:
        print "het resultaat is:", eval(input)
    except EOFError:
        print "EOFError, je calculatie klopt niet."
        input=raw_input("> ")
    print
    print       

    counter=0

1 个答案:

答案 0 :(得分:1)

您的问题是您正在使用eval(),它会尝试将表达式解释为Python表达式。 Python表达式可以引发任何数量的异常,但EOFError是最不可能的异常之一。

代替Exception

try:
    print "het resultaat is:", eval(input)
except Exception:
    print "Oeps, je calculatie klopt niet."

这是所有“常规”例外的基类。

您可以将例外分配给本地名称,并打印出包含错误消息的消息:

try:
    print "het resultaat is:", eval(input)
except Exception as err:
    print "Oeps, je calculatie klopt niet:", err

更好的方法是解析表达式,并可能使用operator module的函数进行计算。

当输入关闭而没有收到任何数据时,raw_input()函数会引发EOFError exception

>>> raw_input('Close this prompt with CTRL-D ')
Close this prompt with CTRL-D Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
EOFError

除非您将包含raw_input()input()调用的字符串传递给eval()函数,否则您将不会遇到该异常。