2012-07-11 12 views
1

我試圖讓這個功能在谷歌App Engine的工作使用Python:龍不轉換爲字符串

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):

類型錯誤:強制爲Unicode:需要字符串或緩衝區,長髮現

我測試過,看到varID實際上是返回一個數字,但它似乎仍然不想轉換,而且我知道我的引號是按順序排列的以及。任何幫助,將不勝感激。

+0

什麼行?在這些情況下發布完整的追溯通常是有幫助的。 – mgilson 2012-07-11 15:52:04

回答

2

確保variable.year是一個字符串或將其轉換。

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錯誤的風險很高,而且你的代碼的可讀性很差。