Python 2.7 (Python)发生错误后如何停止计算

Python 2.7 (Python)发生错误后如何停止计算,python-2.7,stack,postfix-notation,divide-by-zero,try-except,Python 2.7,Stack,Postfix Notation,Divide By Zero,Try Except,有没有办法在异常发生后停止一切 例如,我正在创建一个反向波兰符号计算器(学习后缀),如果字符串中有一个“0”,我想确保打印出“不能被零除” 我用try/except让它做我想做的事 我尝试在异常中的print语句后加上一个“break”,但显然没有帮助,因为我的最后一个“pop”在循环之外。这导致了一系列的回溯错误,因为很明显,没有执行“除以零”操作,列表变得混乱 有什么想法吗 def RPN(ll): mys = Stack() for x in ll: if

有没有办法在异常发生后停止一切

例如,我正在创建一个反向波兰符号计算器(学习后缀),如果字符串中有一个“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)

您可以从函数中的任何位置返回值,而不仅仅是在末尾

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

你说的“停止一切”是什么意思?是否要引发调用函数的异常?是否立即返回值?你想完全退出python吗?是的,这可能用词不好。如果出现0并进行除法(即发生零除法错误),我希望打印出“不能被零除法”,就这样。目前,我收到了一些错误,除了被零除的情况外,这些错误不会发生。也就是说,如果我的列表中没有[0,“/”],程序运行得很好。这非常好。非常感谢。如果我可以问一下,那到底是怎么回事?据我所知,当异常发生时,打印了一些内容,然后“无返回”部分结束了程序。如果你能解释一下,那就太棒了。再次感谢
return
仅结束函数并向调用函数返回值。通常,在函数末尾返回
是一种很好的做法,但是您可以从函数中的任何位置返回
return