【发布时间】:2017-02-01 22:31:43
【问题描述】:
有没有办法在异常发生后停止一切?
例如,我正在创建一个反向波兰符号计算器(用于学习后缀),如果我的字符串中有“0”,我想确保打印出“不能被零除”。
我可以使用 try/except 来做我想做的事。
我尝试在异常中的 print 语句之后添加一个“break”,但这显然没有帮助,因为我的最终“pop”在循环之外。这会导致一堆回溯错误,因为显然没有执行“除以零”操作并且列表变得混乱。
有什么想法吗?
def RPN(ll):
mys = Stack()
for x in ll:
if x == '+':
sum_of_two = mys.new_pop() + mys.new_pop()
mys.push(sum_of_two)
"""mys.print_stack()""" #test addition
elif x == "*":
product = mys.new_pop() * mys.new_pop()
mys.push(product)
"""mys.print_stack()""" #test multiplication
elif x == "-":
subtrahend = mys.new_pop()
minuend = mys.new_pop()
subtrahend
minuend
difference = minuend - subtrahend
mys.push(difference)
"""mys.print_stack()""" #test subtraction
elif x == "/":
divisor = mys.new_pop()
dividend = mys.new_pop()
divisor
dividend
try:
quotient = dividend/divisor
mys.push (quotient)
except ZeroDivisionError:
print "Cannot divide by zero"
"""mys.print_stack()""" #test division
else:
mys.push(int(x))
return mys.new_pop()
example = [3,4,"-",5,"+",6,"*",0,"/"] #test reverse polish calc
print RPN(example)
【问题讨论】:
-
“停止一切”是什么意思?是否要对调用函数引发异常?你想立即返回一个值吗?你想完全退出 python 吗?
-
是的,这可能措辞不当。如果出现 0 并发生除法(即发生 ZeroDivisionError),我希望打印出“不能除以零”,仅此而已。目前,我收到了一些除了除以零之外不会发生的错误。也就是说,如果我的列表中没有[0, "/"],则程序完美运行。
标签: python-2.7 stack postfix-notation divide-by-zero try-except