以下行爲是python固有的問題(如果發生異常,不能更改循環內某個變量的值)或者它是cherrypy的問題(如果一個循環中的某個變量的值不能更改HTTPRedirect異常被引發)?我正在嘗試將'outp'的值從'ORIGINAL'更改爲'NEWVALUE'。Python + Cherrypy - 爲什麼變量'outp'沒有改變值?
我運行下面的代碼片段作爲一個叫做類中的方法「根(對象)」(print語句被突出顯示,方便閱讀):
@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語句內發生變化。如果我註釋掉異常養「養cherrypy.HTTPRedirect(‘/測試’)」:
@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問題。
太棒了。謝謝回覆。我有一種感覺,HTTPRedirect異常是問題所在。 – henryalphabet