有没有办法在异常后停止一切?
例如,我正在创建一个反向抛光符号计算器(学习后缀),我想确保"不能除以零"如果有" 0"则打印出来。在我的字符串中。
我用try / except做了我想做的事。
我尝试过"休息"我在异常中的打印声明后,但显然没有帮助,因为我的最终" 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)
答案 0 :(得分:0)
您可以从函数的任何位置返回值,而不仅仅是在结尾
try:
quotient = dividend/divisor
mys.push(quotient)
except ZeroDivisionError:
print 'Something to console'
return None
当然,无论调用此函数,都必须接受None
作为有效的返回值。
或者,如果这是控制链中的一个函数方式,并且你想要一直冒泡到顶部函数,只需重新引发错误,或者引发一个不同的错误并抓住它顶级功能。
class MyError(Exception):
pass
def func():
try:
func2()
except MyError as e:
print e.message
def func2():
func3():
def func3():
RPN([...])
def RPN(ll):
...
try:
...
except ZeroDivisionError:
raise MyError('Zero Division')