Использование функции повышения, чтобы остановить выполнение следующего кода в python после ошибки
Я использую raise
Функция в Python 2.7 как способ остановить дальнейшее выполнение кода, не выходя, когда условие не выполняется. Это показано в примере ниже:
from Tkinter import *
import tkMessageBox
def foo():
a = 3
if a == 2:
tkMessageBox.showinfo('Hello', 'Yup yup yup')
else:
tkMessageBox.showinfo('Hello', 'My bad!')
raise
tkMessageBox.showinfo('Further code' ,"You shouldn't see me if a is not 2")
app = Tk()
app.title("ABC")
app.geometry()
filetype_fasta = [('fasta files', '*.fasta'), ('All files', '*.*')]
button_templ = Button(app, text = 'Click me', width =6, command = foo)
button_templ.grid(row = 3, column = 2)
app.mainloop()
Он отлично работает для сложного сценария, который у меня есть. У меня такой вопрос - есть ли потенциальная проблема, о которой я должен знать, используя raise
сюда? Если да, есть ли лучший / распространенный способ сделать то же самое?
Изменить: Пример изменен, чтобы лучше продемонстрировать идею.
1 ответ
Самая большая проблема, которая может возникнуть с заявлением "поднять", - это отсутствие связи. Когда вы используете рейз, вам лучше добавить строку документации для функции, в которой используется рейз (то есть, для каких условий функция / метод выдаст ошибку, каковы ошибки / причина и т. Д.).
Также имейте в виду, что вызывающая функция (функция, которая вызывает метод foo
в вашем примере) должен иметь, кроме как должным образом обрабатывать повышение. Даже несколько кодеров фактически используют оператор поднятия для предотвращения нескольких операторов возврата по всему коду. Однако повышение будет обрабатываться в том же методе / функции в этих случаях.
Чтобы представить вещи в лучшем свете (ради нового программиста или программиста, который только что перешел в ваш проект), вы можете создавать пользовательские исключения и вызывать их в соответствующих местах, а не просто давать оператор поднятия. Как отметил в комментариях Джоран Бизли, в использовании рейза нет ничего плохого. За исключением того, что должна быть цель, которая больше, чем просто прерывание потока с помощью оператора повышения.
Если быть точным, то не возникнет проблем как таковых с использованием оператора Повышения. Однако, если вы собираетесь использовать оператор поднятия, следуйте нескольким вежливостям, которые упрощают жизнь того, кто поддерживает код.