2016-12-29 1 views
11

'Hello ' + 1 не возвращает то же самое сообщение об ошибке на Python 3.5 и 3.6:Python 3.6 против 3,5 TypeError сообщение на конкатенации

  • Python 3.5.2: TypeError: Can't convert 'int' object to str implicitly
  • Python 3.6.0: TypeError: must be str, not int

Это простое изменение в формулировке или есть что-то более тонкое позади?

+0

Почему ты спрашиваешь? У вас есть обработчик 'except TypeError', который зависит от точной формулировки сообщения об ошибке? – dan04

+3

Нет, мне просто интересно, связано ли это с модулем 'typing' или набором для переменных, введенных в 3.6. –

ответ

6

Это была просто очистка кода, в котором участвовали строковые объекты. Он также ввел некоторые изменения в сообщениях об ошибках, когда несовместимые объекты используются, чтобы сделать их немного «более информативными».

См.: Issue 26057 - Avoid nonneeded use of PyUnicode_FromObject(), который представил это изменение, если вам интересно.

Здесь нет ничего утонченного, это все еще незаконно и все, автор изменил сообщение об ошибке на то, что он считал более понятным.

Edit: Я создал Issue 29116 - Make str and bytes error messages on concatenation conform with other sequences для решения этого конкретного сообщения, обеспечив при этом сообщение об ошибке для типов байтов, которые имели столь же подробный ответ, когда мы делаем глупые вещи с ними:

>>> b'' + '' 
TypeError: can't concat bytes to str 
+2

На самом деле новое сообщение об ошибке хуже, поэтому любой объект, который реализует '__radd__' правильно, может работать здесь, поэтому' 'должен быть str'', это просто неправильно. Сообщение об ошибке, которое вы получаете с включенными операндами, более ясное: «TypeError: неподдерживаемый тип операндов для +: 'int' и 'str''. – wim

+0

Спасибо Джим, но как @wim сказал, что новое сообщение неяснее. Слишком плохо такой выбор был сделан ... –

+0

@wim Да, это нужно поднимать в трекер. –

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