Выход из функции в Python - PullRequest
       40

Выход из функции в Python

6 голосов
/ 15 января 2009

Я хочу выйти из функции, когда возникает исключение или около того. Я хочу использовать другой метод, кроме 'return'

Ответы [ 5 ]

17 голосов
/ 15 января 2009

Если вы поймаете исключение и затем захотите сбросить его, этот шаблон довольно прост:

try:
    do_something_dangerous()
except:
    do_something_to_apologize()
    raise

Конечно, если вы хотите повысить исключение, во-первых, это тоже просто:

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

Если это не то, что вы хотели, предоставьте больше информации!

4 голосов
/ 15 января 2009

Исключение само прекратит работу функции:

def f():
    a = 1 / 0  # will raise an exception
    return a

try:
    f()
except:
    print 'no longer in f()'
3 голосов
/ 16 января 2009

Как уже отмечали другие, исключение выведет вас из метода. Вы не должны стыдиться или смущаться из-за исключений; исключение указывает на ошибку , но это не обязательно то же самое, что ошибка .

Например, скажем, я пишу факториальную функцию. Факториал не определен для отрицательных чисел, поэтому я мог бы сделать это:

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

НТН!

3 голосов
/ 15 января 2009

Не могу придумать другой способ "выйти" из функции, отличной от а) возврата, б) выброса исключения или в) прекращения выполнения программы.

2 голосов
/ 15 января 2009

Предполагая, что вы хотите «остановить» выполнение внутри этого метода. Есть несколько вещей, которые вы можете сделать.

  1. Не перехватывать исключение. Это вернет управление методу, который вызвал его в первую очередь. Тогда вы можете делать с ней все, что захотите.
  2. sys.exit (0) Этот файл фактически выходит из всей программы.
  3. возврат Я знаю, что вы сказали, что не хотите возвращаться, но выслушайте меня. Возврат полезен, потому что, основываясь на возвращаемом вами значении, это будет хорошим способом сообщить вашим пользователям, что пошло не так.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...