以下行为是python固有的问题(如果引发异常,则无法更改循环内变量的值)还是cherrypy的问题(如果HTTPRedirect异常,则无法更改循环内变量的值被提出)?我正在尝试将“outp”的值从“ORIGINAL”更改为“NEWVALUE”。
我将以下代码片段作为名为“Root(object)”的类中的方法运行(突出显示打印语句以便于阅读):
@cherrypy.expose
def tester(self, cancel=False, submit=False, clear=False, **data):
outp = "ORIGINAL"
if cherrypy.request.method == 'POST':
print outp ############ FIRST PRINT STATEMENT ##########
if True:
outp = "NEWVALUE"
print outp + '1' ############ SECOND PRINT STATEMENT #########
raise cherrypy.HTTPRedirect('/tester')
print outp + '2' ############ THIRD PRINT STATEMENT ##########
tmpl = loader.load('tester.html')
stream = tmpl.generate(outp=outp)
return stream.render('html', doctype='html')
我收到以下输出:
ORIGINAL
NEWVALUE1
127.0.0.1 - - [10/Oct/2012:15:45:33] "POST /tester HTTP/1.1" 303 102
"http://localhost:8080/tester" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0.7)
Gecko/20120829 Firefox/10.0.7"
ORIGINAL2
outp 的值仅在 if 语句内发生变化。如果我注释掉异常引发“raise cherrypy.HTTPRedirect('/tester')”:
@cherrypy.expose
def tester(self, cancel=False, submit=False, clear=False, **data):
outp = "ORIGINAL"
if cherrypy.request.method == 'POST':
print outp ############ FIRST PRINT STATEMENT ##########
if True:
outp = "NEWVALUE"
print outp + '1' ############ SECOND PRINT STATEMENT #########
#raise cherrypy.HTTPRedirect('/tester')
print outp + '2' ############ THIRD PRINT STATEMENT ##########
tmpl = loader.load('tester.html')
stream = tmpl.generate(outp=outp)
return stream.render('html', doctype='html')
我收到以下输出:
ORIGINAL
NEWVALUE1
NEWVALUE2
我不一定要寻找深入的答案,只是想知道这是 Python 引起的行为还是 Cherrypy 引起的行为。我无法通过将代码片段转换为它自己的 Python 脚本来模仿这种行为,因此有迹象表明这是一个 Cherrypy 问题。