2016-10-25 2 views
-2

Почему ручка питон этоПочему Python печатает дескриптор без типов, но не строка?

a = None 
b = 'blub' 
print(a) 
print(b) 

но не

print(a + ' ' + b) 

Это дает: неподдерживаемый тип (ы) операнда для +: 'NoneType' и 'ул'

Почему не он просто преобразует его в None, как в приведенном выше случае? И как я мог получить такое поведение?

+1

Ошибка сообщает точно, что не работает: «неподдерживаемый тип операндов для +». Проблема с плюсом оператора не печатается. – Andrey

+0

Я понимаю ошибку, и я знаю, как ее исправить. Мой вопрос в том, почему так. – Hakaishin

+2

@ Хакаишин: потому что явный лучше, чем неявный. Сначала преобразуйте значение 'None' в строку:' str (a) + ..'. Или используйте форматирование строк. –

ответ

3

Строка concat не была предназначена для автоматического принуждения других типов к строкам «на лету», потому что явно лучше, чем неявный. Вы можете использовать строку форматирования для этого:

print('{} {} {}'.format(a, b, c)) 

Или просто передать параметры непосредственно print:

print(a, b, c) 

Вы также можете явно преобразовать другие типы в строки. И сделай конкат.

+0

Ах, отлично, оба решения были тем, что я искал. Спасибо :) – Hakaishin

+0

@StefanPochmann Да, просто доказательство концепции. –

+0

Пришлось подождать минимальное количество времени :) – Hakaishin

1

Как почему, посмотрите на случай 36 + 'abc' Если это преобразование 36 в строку и конкатенации строки, или он должен преобразовать abc в числовое значение и добавить номера? Правильного ответа нет, поэтому Python не догадывается, если у него нет конкретных правил для этих двух типов.

+0

Мне кажется очевидным, что он должен быть преобразован в строку. Как и 90% времени, я не хочу, чтобы строка была числовой. И в редком случае я хочу, чтобы это как числовое значение, я действительно буду в курсе этого и явным образом преобразую его. Для меня это имеет большее значение. Неявно для вещей, которые часто бывают явными для редких случаев. – Hakaishin

+0

@Hakaishin - Почему он должен быть преобразован в строку? Если '36 + 'abc'' неявно преобразован, он должен, очевидно, оценивать до 2784.: P Перед лицом двусмысленности, подобной этому, Python предпочитает не догадываться. – TigerhawkT3

+0

Как я объяснил, потому что это то, чего хотят люди в 90% случаев. Я понимаю, что вы не можете формально отдать предпочтение друг другу, но есть реальный мир, где реальные люди делают что-то. Это тот же самый странный питонизм, который не позволяет i ++ находиться в python. – Hakaishin

1

Поскольку и с не являются строками, вы должны попробовать:

print(str(a) + ' ' + b + ' ' + str(c)) 

Проблема не «печать», но конкатенация переменных.

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