【问题标题】:Getting out of a function in Python摆脱 Python 中的函数
【发布时间】:2010-10-01 14:23:16
【问题描述】:

我想在发生异常时退出函数。 我想使用'return'以外的其他方法

【问题讨论】:

    标签: python exception function


    【解决方案1】:

    除了 a) 返回、b) 抛出异常或 c) 终止程序的执行之外,想不出其他方法来“退出”函数。

    【讨论】:

    • 类 c) 是 b) 的子类:raise SystemExit
    • 我更多地指的是终止进程(从程序外部手动?)。不过好点。
    【解决方案2】:

    如果你捕捉到一个异常然后想重新抛出它,this pattern 非常简单:

    try:
        do_something_dangerous()
    except:
        do_something_to_apologize()
        raise
    

    当然,如果你想提出异常,那也很容易:

    def do_something_dangerous(self):
        raise Exception("Boo!")
    

    如果这不是您想要的,请提供更多信息!

    【讨论】:

      【解决方案3】:

      异常本身会终止函数:

      def f():
          a = 1 / 0  # will raise an exception
          return a
      
      try:
          f()
      except:
          print 'no longer in f()'
      

      【讨论】:

      • 对,你肯定会这么想。这让我问原来的问题是/真的/要求...
      【解决方案4】:

      假设您想在该方法内“停止”执行。您可以做一些事情。

      1. 不要捕获异常。这会将控制权返回给最初调用它的方法。然后你可以用它做任何你想做的事情。
      2. sys.exit(0) 这个实际上退出了整个程序。
      3. return 我知道您说过您不想返回,但请听我说完。 Return 很有用,因为根据您返回的值,这将是让您的用户知道出了什么问题的好方法。

      【讨论】:

        【解决方案5】:

        正如其他人指出的那样,异常会让您退出该方法。你不应该因为例外而感到羞耻或尴尬;异常表示错误,但不一定与错误相同。

        例如,假设我正在编写一个阶乘函数。没有为负数定义阶乘,所以我可以这样做:

        def factorial(n):
          if n < 0:
            raise ValueError
          if n == 0:
            return 1
          return n*factorial(n-1)
        

        然后我会寻找异常:

        n = raw_input('Enter a number.')
        try:
          print factorial(n)
        except ValueError:
          print 'You entered a negative number.'
        

        我可以通过定义自己的异常来使异常比 ValueError 提供更多信息:

        class NegativeInputError(Exception):
          pass
        
        # in the function:
        if n < 0:
          raise NegativeInputError
        

        HTH!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-17
          • 2017-05-28
          • 2019-04-22
          • 1970-01-01
          • 2014-08-24
          • 2013-12-22
          相关资源
          最近更新 更多