出错后使用 raise 函数停止执行 python 中的更多代码

Using raise function to stop execution of further code in python after an error

我在 python 2.7 中使用 raise 函数作为在不满足条件时停止执行更多代码而不退出的方法。如下例所示:

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 是否有任何我应该注意的潜在问题?如果是,是否有 better/common 方法来做同样的事情?

编辑:更改示例以更好地展示想法。

'raise' 声明会引发的最大问题是缺乏沟通。使用 raise 时,最好为使用 raise 的函数添加一个文档字符串(即 function/method 在什么情况下会抛出错误,什么是 errors/cause 等等)。

另请注意,调用函数(在您的示例中调用方法 foo 的函数)需要有一个 except 来正确处理加注。甚至一些编码员实际上使用 raise 语句来防止整个代码中出现多个 return 语句。但是,在这些情况下,加注将在相同的 method/function 中处理。

为了更好地看待事情(为了新程序员或刚搬到您的项目的程序员),您可以创建自定义异常并在适当的地方引发它们,而不仅仅是给出 raise 语句。正如 Joran Beasley 在评论中提到的那样,使用 raise 绝对没有错。除了应该有一个目的,而不仅仅是使用 raise 语句来打破流程。

准确地说,使用raise语句不会有任何问题。但是,如果您打算使用 raise 语句,请遵循一些礼节,使维护代码的人的生活更简单。