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

时间:2015-02-11 02:32:25

标签: python python-2.7 raise

我在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是否存在任何潜在的问题?如果是的话,是否有更好的/常用的方法来做同样的事情?

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

1 个答案:

答案 0 :(得分:3)

随着“提高”而引发的最大问题。声明是缺乏沟通。当你使用raise时,你最好为使用raise的函数添加一个doc字符串(也就是说,函数/方法会抛出错误的条件,错误/原因等等)。

还要注意,调用函数(在您的示例中调用方法foo的函数)需要正确处理加值。甚至一些编码器实际上使用raise语句来防止整个代码中的多个返回语句。但是,在这些情况下,加注将以相同的方法/功能处理。

为了让事情处于更好的视角(为了新程序员或刚搬到项目中的程序员),您可以创建自定义异常并在适当的位置提升它们,而不是仅仅给出一个raise语句。正如Joran Beasley在评论中提到的,使用加注绝对没有错。除了应该有一个目的,不仅仅是使用raise语句打破流程。

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