1

我正在尝试使用 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 实际上返回了一个数字,但它似乎仍然不想转换,而且我知道我的引号也是正确的。任何帮助,将不胜感激。

4

2 回答 2

2

确保variable.year是一个字符串或转换它。

于 2012-07-11T15:52:06.897 回答
0

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

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

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

于 2012-07-23T06:26:59.487 回答