2014-01-30 54 views
0

我試圖創建一個Python CGI腳本的HTML表單。我不明白蟒蛇`打印「」「'

script_name=os.environ.get('SCRIPT_NAME', '') 

form = cgi.FieldStorage() 
message = form.getvalue("message", "(no message)") 

print """ 

    <p>Previous message: %s</p> 

    <p>form 

    <form method="post" action="%s"> 
    <p>message: <input type="text" name="message"/></p> 
    </form> 

</body> 

</html> 
""" % cgi.escape(message), script_name 

以上當然是行不通的。我是假的印象是, 整個print """ blah blah %s ...""" % string_var工作像C的printf功能 那麼,要我想在這裏做

我在瀏覽器中收到此錯誤信息:?

Traceback (most recent call last): 
    File "/usr/lib/cgi-bin/hello.py", line 45, in <module> 
    """ % cgi.escape(message), script_name 
TypeError: not enough arguments for format string 
+1

居然會發生什麼?你有錯誤信息嗎?如果是這樣,你能把它展示給我們嗎? – user2357112

+4

將括號內的格式化參數包裝在內:) – mhlester

+1

如果沒有括號,Python會認爲您想要打印兩樣東西:一個格式參數爲單個字符串,另一個爲第二個變量。 – jayelm

回答

2

您需要將括號中的格式參數包裝起來。

print """ %s %s 
do re me fa so la ti do 
""" % (arg1(arg), arg2) 
3
print 'blah' % x, y 

不被解釋爲

print 'blah' % (x, y) 

而是圍繞cgi.escape(message), script_name而是作爲

print ('blah' % x), y 

認沽括號元組爲第二個參數傳遞給%。順便提一句,這是您可能希望str.format方法優於%的原因之一。

2

當你的代碼執行,這種情況發生的第一件事就是它計算表達式

long_string % cgi.escape(message) 

因爲有長串的兩個鍵,但只有一個在%操作者的另一側值,這是您看到的TypeError失敗。

的解決方案是在括號包裹兩個值,所以第二個操作數被解釋爲一個元組:

long_string % (cgi.escape(message), script_name) 
+0

更好的解決方案是使用新的'.format'方法,如果使用它,這個錯誤永遠不會發生。 – SethMMorton

+0

@Steh interesting。我可以在哪裏學到更多關於.format? –

+0

[Format string syntax](http://docs.python。組織/ 2 /庫/ string.html#格式串的語法) – SethMMorton