2016-10-25 2 views
2

Я экспериментировал некоторые строковые выходные, и я наткнулся на что-то, что бросает ошибку при печатиPython строка знак процента избежать

x = "ll=%s%2C%20%s" % ("lat", "lng") 

Синтаксис выше выдает ошибку:

ValueError: unsupported format character 'C' (0x43) at index 7 

Что я отсутствующий Вот? Я хотел бы иметь результат:

ll=lat%2C%20lang 

С использованием% S операторов на конкатенации переменную внутри строки

+0

Включены ли эти данные в URL-адрес Google Maps? – Blender

+0

Собственно, да, это будет –

+0

Это старый формат, я не думаю, что он больше работает – Blender

ответ

4

Когда питон видит, что %, он ожидает символ форматирования сразу после этого. В принципе, он ожидает что-то вроде %s или %d ... Но он находит C, и он не знает, что с этим делать.

Вы можете увидеть, что вы можете положить после % в this link.

Если вы хотите, чтобы буквально % в строке вы должны бежать его с другим %:

>>> x = "ll=%s%%2C%%20%s" % ("lat", "lng") 
>>> x 
'll=lat%2C%20lng' 

Обратите внимание, что в Python 3, таким образом, считается «устаревшей» в пользу более новых .format() способ. Вы также можете использовать это один в Python 2.7 (я верю, хотя я не уверен, что он был введен в Python 2.6?) И сделать то же самое, как это:

>>> x = "ll={0}%2C%20{1}".format("lat", "lng") 
>>> x 
'll=lat%2C%20lng' 

Или вы могли бы сделать даже любителю вещи:

>>> x = "ll={latitude}%2C%20{longitude}".format(latitude="lat", longitude="lng") 
>>> x 
'll=lat%2C%20lng' 

Check it out! (также есть Reddit thread об этом)

+0

СПАСИБО ВАМ ОЧЕНЬ! –

+0

Да, конечно! –

+1

Представлено в Python 2.6 -> https://docs.python.org/2/whatsnew/2.6.html#pep-3101-advanced-string-formatting – idjaw

2

Прежде всего, если вы хотите напечатать % вам нужно сделать это как этот

%% -> Игнорирует % буквенный символ

все другие комбинации будут рассматриваться как отформатированных символов. например %c рассматривается как один символ, представленный как C int.

Пожалуйста, обратитесь к ссылке here

+0

СПАСИБО ВАМ ОЧЕНЬ! –

+1

Спасибо за редактирование @idjaw –

+0

@AjayPal добро пожаловать. – idjaw

2

Чтобы избежать % в питона, просто использовать %%, в вашем примере, следующий будет давать результат, который вы хотите,

x = "ll=%s%%2C%%20%s" % ("lat", "lng") 

Или вы можете использовать струны формат, который является предпочтительным в python 3, а также доступен в python 2.7

x = "ll={0:s}%2C%20{1:s}".format("lat", "lng") 

Один совет для вас это от % форматирование стиля к методу формата строки, AFAIK, все буквы % остаются теми же, что и в методе формата строки.Это означает, что "%s" % "lat" просто станет "{0:s}".format("lat"), "%d" % 3 до "{0:d}".format(3) и т. Д. Обратите внимание на 0. Это указывает на то, какой параметр в методе format отформатирован с первого параметра индексируется как 0.

Смотрите подробнее здесь на официальной документации о python string's format method

+1

Поздравляем вас с первым ответом! :) Просто дружеское примечание, чтобы использовать инструменты форматирования при ответе на вопросы. Я взял на себя смелость отредактировать свой ответ, чтобы отформатировать его соответствующим образом. Но если вы вернетесь к редактированию своего ответа, вы увидите некоторые инструменты, которые помогут вам отформатировать ваш ответ. :) Привет. – idjaw

+1

Большое спасибо за советы, @idjaw! просто обратите внимание на использование синтаксиса уценки здесь! – woodstonelee

1

в сторону от% побеге. Вы также можете добавить «%» в «ш» перед передачей его или просто добавить еще «% S» для «%»

>>> x = "ll=%s2C%s20%s" % ("lat%", "%","lng") 
>>> x 
'll=lat%2C%20lng' 

им просто дает вам еще один option.but %% побег является лучшим выбор

+0

omg sir dean christian armada, рад видеть вас здесь ..: D надеюсь, что вы меня помните. –

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