如何在Python中添加字符串和int对象?

时间:2014-01-21 23:29:39

标签: python

我需要什么?

我有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是不加引号'

3 个答案:

答案 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)+")"

以正确的格式打印。