我有这个python程序
功能:
def populate_year(self, cursor, user_id, context=None):
year_dropdown = ''
for y in range(2010, (datetime.datetime.now().year + 10)):
year_dropdown = year_dropdown + '(' + y, y + '),'
return year_dropdown
字段:
'year': fields.selection(populate_year,'Year',select=True, required=True),
我收到此错误:
TypeError: cannot concatenate 'str' and 'int' objects
答案 0 :(得分:1)
您可以使用str
将整数年转换为字符串,然后连接。
但是,string formatting会为您执行类型强制:
>>> '({year}, {year})'.format(year=2014)
'(2014, 2014)'
您还可以使用分隔符将字符串连接在一起:
>>> ','.join(['a', 'b', 'c'])
'a,b,c'
共:
this_year = datetime.datetime.now().year
year_dropdown = ','.join('{year}, {year}'.format(year=year)
for year in range(2010, this_year + 10)
答案 1 :(得分:0)
你在这一行中遇到了两个问题:
year_dropdown = year_dropdown + '(' + y, y + '),'
一个是你使用... + ... , ... + ...
- 你想在那里使用加号吗?或引用,
部分?
另一个是您看到错误的地方,year_dropdown
是一个字符串,y
是一个int。在这种情况下,您可以使用str(y)
。
答案 2 :(得分:0)
在for循环中使用str(y)
代替y
for y in range(2010, (datetime.datetime.now().year + 10)):
year_dropdown = year_dropdown + '(' + str(y), str(y) + '),' # use str(y)
'(' + y, y + '),'
在这里,您正在整理string
和int
(y)
看看你在做什么
在第一次迭代y=2010
'(' + 2010, 2010 + '),'
您正在使用y
汇总字符串,这是一个int
值。