2016-08-24 3 views
0

Python версия 3.4.3Python рассматривает «is» для плюрализации строкового литерала

Python преобразование строки литерала в множественное число. Я не могу понять, как это решить.

Когда я вхожу:

>>> x = ("The number % is incorrect" % 8) 
>>> x 
'The number 8s incorrect' 

Когда я пытаюсь уйти «в» Я получаю сообщение об ошибке.

>>> x = ("The number % \is incorrect" % 8) 
ValueError: unsupported format character '\' (0x5c) at index 13 
+0

Что вы имеете в виду, убегая 'is'? '% \' является недопустимым символом формата, а '% i' - нет. –

ответ

6

Попробуйте 'the number %d is incorrect' % 8

Проблема заключается в том, что питон читает ваши % (с пространством, спасибо, Ashwini), и думая, что это ваше формат.

+1

Пространство фактически является допустимым флагом, поэтому '% is' и'% is' не являются эквивалентными: [printf-style String Formatting] (https://docs.python.org/3.5/library/stdtypes.html#printf- style-string-formatting) –

+0

Ah. Спасибо, отредактировал бы мой ответ. – perfect5th

+1

Я полностью забыл о флагом 'd'. Это сделал трюк. Благодаря! –

9

Просто используйте format функцию вместо:

x = "The number {} is incorrect".format(8) 
+5

Параны не нужны, вы можете просто сделать 'x =" Число {} неверно ".format (8)' – maniexx

+0

Да, это правда, я только пытался отразить пример OP. – turkus

3

Строка:

'the number % is incorrect' % 8 

фактически интерпретируется как:

'the number [% i]s incorrect' % 8 
      #^conversion specifier 

и в соответствии с docs on formatting, спецификатор i собирается получить замещенный целым числом 8.

Это может быть легко опосредовано фактически предоставляя спецификатор сразу после % как в:

'the number %i is incorrect' % 8