有没有办法在Python函数中“中断”或“继续”?

时间:2015-03-31 19:35:00

标签: python

我需要编写一个函数(Flask视图)来测试有关请求的几个条件,并根据这些测试返回一条消息。

例如......

def index():
    test1result = test1(request.form['data'])
    if not test1result:
        message = 'Failed test 1'

    test2result = test2(request.form['data'])
    if not test2result:
        message = 'Failed test 2'

    test3result = test3(request.form['data'])
    if not test3result:
        message = 'Failed test 3'

    return render_template('index.html', message = message)

如果第一次测试失败,我不希望第二次或第三次测试运行并覆盖我的消息。我的第一个想法是将return语句插入到每个IF块中,但这看起来很混乱。

4 个答案:

答案 0 :(得分:2)

在这种情况下,您应该使用elif仅在第一次测试失败时才分支到您以后的测试中,或者只是return。但你也可以这样做:

def index():
    messages = []
    test1result = test1(request.form['data'])
    if not test1result:
        message.append('Failed test 1')

    test2result = test2(request.form['data'])
    if not test2result:
        message.append('Failed test 2')

    test3result = test3(request.form['data'])
    if not test3result:
        message.append('Failed test 3')

    return render_template('index.html', messages=messages)

让您的视图显示所有错误消息。

答案 1 :(得分:2)

  

我的第一个想法是将return语句插入到每个IF块中,但这看起来很混乱。

如果您进行小型重构,则不是这样:

def index_message():
    test1result = test1(request.form['data'])
    if not test1result:
        return 'Failed test 1'

    test2result = test2(request.form['data'])
    if not test2result:
        return 'Failed test 2'

    test3result = test3(request.form['data'])
    if not test3result:
        return 'Failed test 3'

    return '......'

def index():
    message = index_message()
    return render_template('index.html', message = message)

或者,您可以使用elseelif来避免进一步处理。

如果您有更多测试,请将它们添加到数据结构(例如:list)并使用循环。不要重复代码。

答案 2 :(得分:1)

您可以使用elif

首先运行所有测试,然后运行if-elif

def index():
    test1result = test1(request.form['data'])
    test2result = test2(request.form['data'])
    test3result = test3(request.form['data'])
    if not test1result:
        message = 'Failed test 1'
    elif not test2result:
        message = 'Failed test 2'
    elif not test3result:
        message = 'Failed test 3'

    return render_template('index.html', message = message)

答案 3 :(得分:0)

使用循环。

def index():
   tests = [test1, test2, test3]
   for i, test in enumerate(tests, 1):
       if not test(request.form['data']):
           return render_template('index.html', message="Failed test %s" % i)