2014-01-21 2 views
1

Что мне нужно?Python: как добавить строку и объект int?

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

Очевидно, я недоразумение ваш вопрос по моему нисходящему ответу. Можете ли вы уточнить, что хотите? – mhlester

+0

В последнем разделе довольно ясно, что искатель хочет знать, как печатать строку запятыми на основе строки и целого числа. –

ответ

6

Объединение строк в 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)" 
+0

Фактически '%' устарел - вместо этого используйте 'str.format'. –

+0

@ KonradRudolph Percent быстрее вводит и получает ответ. После его включения я всегда добавляю формат после (я не могу вспомнить некоторые из более интересных синтаксисов). –

+0

@ KonradRudolph percent также быстрее выполняется! – mhlester

1

Он наконец щелкнул, что вы хотите и что ваш вход! Это для объектов столбцов произвольной длины! Здесь я пойти:

return_string = "(" + ', '.join((repr(column) for column in columns)) + ")" 

Выход точно по запросу:

('a', 1) 

Все предыдущие ответы (включая мои удаленные один), принимают на себя фиксированный вход два элемента. Но, читая ваш код (и пробираясь сквозь отрыв от падения), я вижу, что вы хотите, чтобы какой-либо объект columns был представлен

0

Вы не можете объединить (или объединить) целые числа со строками. Также повторяющиеся конкатенации строк очень медленные. repr ставит квоты вокруг строк, но не целые, а превращает их в строки. Попробуйте это:

return "(%s)," % ", ".join(repr(c) for c in columns) 
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)+")" 

для печати в правильном формате

Смежные вопросы