有没有办法“;中断”;或“;继续”;在Python函数中?
我需要编写一个函数(Flask视图),它将测试关于请求的几个条件,并根据这些测试返回一条消息 例如有没有办法“;中断”;或“;继续”;在Python函数中?,python,Python,我需要编写一个函数(Flask视图),它将测试关于请求的几个条件,并根据这些测试返回一条消息 例如 def index(): test1result = test1(request.form['data']) if not test1result: message = 'Failed test 1' test2result = test2(request.form['data']) if not test2result: mess
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)
如果第一个测试失败,我不希望第二个或第三个测试运行并覆盖我的消息。我的第一个想法是在每个IF块中插入return语句,但这看起来很混乱。在这种情况下,如果第一个测试失败,您应该使用
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)
并让您的视图显示所有错误消息。在这种情况下,如果第一次测试失败,您应该使用
elif
只分支到以后的测试,或者只返回即可。但你也可以这样做:
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)
并让您的视图显示所有错误消息
我的第一个想法是在每个IF块中插入return语句,但这看起来很混乱
如果您进行一次小的重构,则情况并非如此:
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)
或者,您可以使用else
和elif
来避免进一步处理
如果有更多测试,请将它们添加到数据结构(例如:列表
)并使用循环。不要重复代码
我的第一个想法是在每个IF块中插入return语句,但这看起来很混乱
如果您进行一次小的重构,则情况并非如此:
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)
或者,您可以使用else
和elif
来避免进一步处理
如果有更多测试,请将它们添加到数据结构(例如:列表
)并使用循环。不要重复代码。您可以使用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)
您可以使用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)
使用循环
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)
使用循环
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)
一点也不乱。使用返回!我认为最好的方法是拿一本书来研究基础,你也可以使用例外,一点也不混乱。使用返回!我认为最好的方法是拿一本书来研究基本知识,你也可以使用例外。