0

我正在尝试创建一个计算器。为什么我无法捕捉到 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
4

1 回答 1

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模块的函数进行计算。

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

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

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

于 2013-09-18T20:53:12.420 回答