我正在尝试创建一个计算器。为什么我不能抓住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
答案 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()
函数,否则您将不会遇到该异常。