我需要什么?
我有SQL内容,如:
('a', 1),
所以我这样做:
return_string = '('
for column in columns:
return_string += "'" + column + "', "
return_string = return_string[:-2] + '),'
return return_string
但它失败并出现同样的错误。
>>> a = 'a'
>>> a + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
>>> 1 + "1"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>
但是,如果我将int转换为字符串,一切正常,我得到:
('a', '1'),
但我需要
('a', 1),
其中1是不加引号'
答案 0 :(得分:7)
Python中的字符串连接仅适用于字符串。它并不像其他语言那样根据需要推断类型。
有两个选项,将整数转换为字符串并将它们全部加在一起:
>>> x ="a"
>>> y = 1
>>> "(" + x + "," + str(y) + ")"
'(a,1)'
>>> "('" + x + "'," + str(y) + ")"
"('a',1)"
>>> "(" + repr(x) + "," + str(y) + ")"
"('a',1)"
或者使用字符串格式来处理幕后的部分内容。使用(deprecated) "percent formatting":
>>> "(%s,%d)"%(x,y)
'(a,1)'
>>> "('%s',%d)"%(x,y)
"('a',1)"
>>> "(%s,%d)"%(repr(x),y)
"('a',1)"
或更多standard and approved format mini-language:
>>> "({0},{1})".format(x, y)
'(a,1)'
>>> "('{0}',{1})".format(x, y)
"('a',1)"
>>> "({0},{1})".format(repr(x), y)
"('a',1)"
答案 1 :(得分:1)
它最终点击了你想要的和你的输入!这是任意长度列对象!你走了:
return_string = "(" + ', '.join((repr(column) for column in columns)) + ")"
输出完全符合要求:
('a', 1)
所有先前的答案(包括我删除的答案)都假定一个固定的两项输入。但是,阅读您的代码(并通过缩进损坏),我发现您希望表示任何columns
对象。
答案 2 :(得分:1)
您可以创建一个功能来正确表示您的类型:
def toStr(x):
if isinstance(x, int):
return str(x)
#another elif for others types
else:
return "'"+x+"'"
并使用
myTuple = ('a', 1, 2, 5)
print "("+", ".join(toStr(x) for x in myTuple)+")"
以正确的格式打印。