python:无法连接'str'和'long'对象

时间:2010-08-20 16:31:01

标签: python

我正在尝试在django中设置一个选择字段,但我不认为这是一个django问题。选择字段采用2元组的可迭代(例如,列表或元组)作为该字段的选项。

这是我的代码:

self.fields['question_' + question.id] = forms.ChoiceField(
                label=question.label,
                help_text=question.description,
                required=question.answer_set.required,
                choices=[("fe", "a feat"), ("faaa", "sfwerwer")])

由于某种原因,我总是得到以下错误:

TypeError - cannot concatenate 'str' and 'long' objects

始终突出显示最后一行。

我不想连接任何东西。几乎不管我将列表更改为'choices'参数,我都会收到此错误。

发生了什么事?

5 个答案:

答案 0 :(得分:33)

很可能只是突出显示最后一行,因为你将语句拆分为多行。

实际问题的修复很可能会改变

self.fields['question_' + question.id]

self.fields['question_' + str(question.id)]

由于您可以在Python解释器中快速测试,因此在一起添加字符串和数字不起作用:

>>> 'hi' + 6

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    'hi' + 6
TypeError: cannot concatenate 'str' and 'int' objects
>>> 'hi' + str(6)
'hi6'

答案 1 :(得分:6)

'question_'是一个字符串,question.id是一个字符串。您无法连接两种不同类型的东西,您必须使用str(question.id)将长整数转换为字符串。

答案 2 :(得分:1)

可能question.id是一个整数。尝试

self.fields['question_' + str(question.id)] = ...

代替。

答案 3 :(得分:1)

self.fields['question_' + question.id]

这看起来像是问题所在。试试

"question_%f"%question.id

"question_"+ str(question.id)

答案 4 :(得分:-2)

这是在一行中做太多事情的问题 - 错误消息变得不那么有用。如果你把它写成下面那么问题会更容易找到

question_id = 'question_' + question.id
self.fields[question_id] = forms.ChoiceField(
                label=question.label,
                help_text=question.description,
                required=question.answer_set.required,
                choices=[("fe", "a feat"), ("faaa", "sfwerwer")])