2013-07-29 61 views
0
#!/usr/bin/python 

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

name = form.getvalue('name') 
age = int(form.getvalue('age')) + 1 
print "Content-type: text/html" 
print 
print "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">" 
print "<html>" 
print "<head><title></title></head>" 
print "<body>" 
print "<p> Hello, %s</p>" % (name) 
print "<p> Next year, you will be %s years old.</p>" % age 
print "</body>" 
print "</html>" 

每當我寫下DOCTYPE時,都會出現無效語法錯誤。不知道問題是什麼。因爲我是python的新手,所以很感謝。謝謝!Python DOCTYPE語法錯誤

+0

當你打印你得到一個錯誤「!DOCTYP ......」 ?您可能想用逗號分隔這些內容,或者避開引號。 – sihrc

回答

1

您的引號衝突(請注意語法突出顯示在該行之後如何中斷)。

無論是使用單引號:

print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ' 
     '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' 

或三引號,:

print """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">""" 
1

使用不同的報價:

print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' 

打印語句看到引號中間的結束引號。您需要使用/」或使用不同的報價逃脫了引號的。

print '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">' 
1

你雙引號中已經包含雙引號。Python的認爲PUBLIC後您的字符串結尾的字符串,而接下來的事情似乎是一個負號,後面跟着一個除號,這是一個錯誤,最重要的是,你已經把字符串分成了兩行,沒有任何連續字符,這是行不通的,用三重引號允許一個字符串從一行到下一個繼續(這也將與嵌入式"字符解決您的問題)。

print '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">''' 
1

對於那種 「長多文本」 的可能更喜歡使用triple quotes""")。

再加上format字符串的方法可在任何體面的最新版本的Python,你得到的可憐的人模板引擎:

tmpl = """Content-type: text/html 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title></title></head> 
<body> 
<p> Hello, {name}</p> 
<p> Next year, you will be {age} years old.</p> 
</body> 
</html> 
""" 

print tmpl.format(name='Sylvain', age=40)