Python &引用;并非所有参数都在字符串格式化过程中转换;回溯
下面的cgi.escape部分在dev服务器中抛出了回溯,但是当我注释掉cgi.escape时,我在RequestHandler上得到了语法错误。我正在学习谷歌的教程,其中包括一个表单的两个提交按钮,这对我来说是不清楚的,还有/sign?形式作用;我下面的表格是1(不是2)个提交按钮,用于组合文本和单选字段表格,所以我不确定我是否正确地完成了最后一部分,甚至是表格。我已经准备好了所有的进口货。在数据存储、电子表格或其他任何东西中获取这些用户表单值…非常感谢您的帮助Python &引用;并非所有参数都在字符串格式化过程中转换;回溯,python,string,google-app-engine,Python,String,Google App Engine,下面的cgi.escape部分在dev服务器中抛出了回溯,但是当我注释掉cgi.escape时,我在RequestHandler上得到了语法错误。我正在学习谷歌的教程,其中包括一个表单的两个提交按钮,这对我来说是不清楚的,还有/sign?形式作用;我下面的表格是1(不是2)个提交按钮,用于组合文本和单选字段表格,所以我不确定我是否正确地完成了最后一部分,甚至是表格。我已经准备好了所有的进口货。在数据存储、电子表格或其他任何东西中获取这些用户表单值…非常感谢您的帮助 Traceback (most
Traceback (most recent call last): Fil "/home/paul/Desktop/google_appengine/google/appengine/ext/webapp/_webapp25.py", line 701, in __call__
handler.get(*groups) File "/home/paul/Desktop/emot/index.py", line 39, in get
cgi.escape(name))) TypeError: not all arguments converted during string formatting
代码:
name=self.request.get(“name”)
self.response.out.write(“”)
名字:
好
坏的
公平的
“%”(urllib.urlencode({“name”:name}),
cgi.escape(name))#<<此处无字符串转换
类信息(webapp.RequestHandler):#<<注释掉^^时出现语法错误。
def post(自我):
name=self.request.get(“name”)
访问者=访问者(父项=信息键(名称))
visitor.content=self.request.get(“心情”)
visitor.put()
self.redirect(“/?”+urllib.urlencode({“name”:name}))
application=webapp.WSGIApplication([
(“/”,主页),#<
这就是您遇到问题的地方。请注意,这整段代码都包装在函数调用中:
self.response.out.write("""
<form action="/sign?/s" method="post">
<p>First Name: <input type="text" name="name"/></p>
<p><input type="radio" name="mood" value="good">Good</p>
<p><input type="radio" name="mood" value="bad">Bad</p>
<p><input type="radio" name="mood" value="fair">Fair</p>
<p><input type="submit"value="Process"></p>
</form>
</body>
</html>""" % (urllib.urlencode({"name": name}),
cgi.escape(name))) # self.response.out.write ends here
剩下的是一个字符串格式化操作,格式为“string literal”“”%(元组,of,value)
。要使此操作起作用,需要为要包含在字符串中的每个值包含说明符(我发现“hooks”是一个更具描述性的术语)。这些将始终以百分号开头,后面有一个或多个字符。您可以阅读更多有关它的内容,但有几个快速示例包括整数的%d
、字符串的%s
、浮点值的%f
您的代码示例对此操作有两个参数,urllib.urlencode({“name”:name})
,和cgi.escape(name)
。但是,您的字符串不包含任何说明符(%s
等),以便解释器理解您要将它们放在哪里
在我看来,您有两种选择—您可以将所有参数一起删除(但请确保为
self.response.out.write
call]留下一个尾随括号),或者将钩子放在需要的地方。这就是您遇到问题的地方。请注意,这整段代码都包装在函数调用中:
self.response.out.write("""
<form action="/sign?/s" method="post">
<p>First Name: <input type="text" name="name"/></p>
<p><input type="radio" name="mood" value="good">Good</p>
<p><input type="radio" name="mood" value="bad">Bad</p>
<p><input type="radio" name="mood" value="fair">Fair</p>
<p><input type="submit"value="Process"></p>
</form>
</body>
</html>""" % (urllib.urlencode({"name": name}),
cgi.escape(name))) # self.response.out.write ends here
剩下的是一个字符串格式化操作,格式为“string literal”“”%(元组,of,value)
。要使此操作起作用,需要为要包含在字符串中的每个值包含说明符(我发现“hooks”是一个更具描述性的术语)。这些将始终以百分号开头,后面有一个或多个字符。您可以阅读更多有关它的内容,但有几个快速示例包括整数的%d
、字符串的%s
、浮点值的%f
您的代码示例对此操作有两个参数,urllib.urlencode({“name”:name})
,和cgi.escape(name)
。但是,您的字符串不包含任何说明符(%s
等),以便解释器理解您要将它们放在哪里
在我看来,您有两种选择—您可以将所有参数一起删除(但请确保为
self.response.out.write
call]留下一个尾随括号),或者将钩子放在您需要的地方。感谢Hannele提供了一个清晰的解释。我应该注意到%…说明符看起来像占位符。只需删除参数并在需要时报告。非常感谢@铺。。如果答案有用,你应该开始接受。。以下是方法和原因:感谢Channele的清晰解释。我应该注意到%…说明符看起来像占位符。只需删除参数并在需要时报告。非常感谢@铺。。如果答案有用,你应该开始接受。。以下是方法和原因:
"""
<form action="/sign?/s" method="post">
<p>First Name: <input type="text" name="name"/></p>
<p><input type="radio" name="mood" value="good">Good</p>
<p><input type="radio" name="mood" value="bad">Bad</p>
<p><input type="radio" name="mood" value="fair">Fair</p>
<p><input type="submit"value="Process"></p>
</form>
</body>
</html>""" % (urllib.urlencode({"name": name}),
cgi.escape(name)) # one less bracket!