很久没有转换为String

时间:2012-07-11 15:49:13

标签: python google-app-engine long-integer cherrypy

我正在尝试使用Python在Google App Engine中使用此功能:

def textarea(id):
    variable = brfsscodegenerator.Variable.get_by_id(int(id))
    varID = variable.key().id()
    textarea = ("<tr><td>" + variable.name + "</td><td>" + variable.year + 
            "</td><td><textarea id='textarea' name='qtext_" + str(varID) + "'>" )
    return textarea

但是我得到了这个错误(我正在使用CherryPy):

TypeError:强制转换为Unicode:需要字符串或缓冲区,找不到

我已经测试过看到varID实际上是返回一个数字,但它似乎仍然不想转换,我知道我的引号也是有序的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

确保variable.year是字符串或将其转换。

答案 1 :(得分:0)

当您尝试将字符串与一个字符串连接时,Python不会自动将数字格式化为字符串。这是一个深思熟虑的设计选择,因为Python的指导原则之一,&#34;显式优于隐式&#34;。您可以使用str(num)转换数字,但更好的方法是使用整个字符串格式,如下所示:

textarea = "<tr><td>%s</td><td>%d</td><td><textarea id='textarea' name='qtext_%d'>" % (variable.name, variable.year, varID)

更好的方法是使用模板系统而不是自己插入字符串。以这种方式引入XSS错误的风险很高,而且您的代码的可读性要低得多。