какая ошибка в коде: & ldquo; значение% s не является int & rdquo; % `значение`

df1.take(1).length>0

Метод take возвращает массив строк, поэтому, если размер массива равен нулю, в df нет записей.

-2
задан melpomene 14 July 2018 в 00:49
поделиться

1 ответ

Проблема заключается в этой части:

`value`

В Python 2.x, это означало то же, что и repr(value) . Гвидо называл это самой большой ошибкой синтаксиса в Python. По-видимому, это никогда не осуждали, просто зарывали в документах, где никто их никогда не заметит. Но неудивительно, что Python 3 немедленно удалил его с помощью этого краткого объяснения:

Удалены обратные обратные (вместо этого используйте repr()).

Итак, вы можете исправить это следующим образом:

assert (type(value) == int), "value %s is not an int" % repr(value)

Но на самом деле это именно то, что %r для:

assert (type(value) == int), "value %r is not an int" % value

Из printf -style String Formatting docs:

  • 'r' String (преобразует любой объект Python с помощью repr()). (5)
  • 's' String (преобразует любой объект Python с помощью str()). (5)

С этим изменением эта строка теперь действует как Python 2.7, так и Python 3.6 (и 2.1 и 3.8pre, если на то пошло).


Если вам повезет, это просто означает, что ваш учитель не совсем поймал все, обновляя свои уроки и задания для Python 3, и он больше не появится. (Хотя вы должны указать это на них.)

Но если ваш учитель на самом деле учит Python 2, а не Python 3, вам, вероятно, нужно будет использовать Python 2.7 вместо 3.6, или у вас будет много больше проблем.


Если вы используете Python 3, и вы не хотите изучать форматирование printf -типов, просто обновите его:

assert (type(value) == int), f"value {value!r} is not an int"
1
ответ дан abarnert 17 August 2018 в 12:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: