2016-10-25 4 views
2

experimentiere ich einige String-Ausgänge und stieß ich auf etwas, das einen Fehler auslöst, wennPython-String Prozentzeichen entkommen

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

Die Syntax oben wirft einen Fehler:

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

Was bin ich fehlt Hier? Ich möchte ein Ergebnis haben:

ll=lat%2C%20lang 

Mit der Verwendung von% s Betreiber auf eine Variable in einem String verketten

+0

Werden diese Daten in eine Google Maps-URL übernommen? – Blender

+0

Eigentlich, ja, es wird –

+0

Das ist das alte Format, ich glaube nicht, dass es mehr funktioniert – Blender

Antwort

4

Wenn Python, dass % sieht, es ist eine Formatierungssymbol rechts danach erwartet. Im Grunde erwartet es so etwas wie %s oder %d ... Aber es findet ein C, und es weiß nicht, was damit zu tun ist.

Sie können sehen, was Sie nach % in this link setzen können.

Wenn Sie buchstäblich % in der Zeichenfolge haben wollen, müssen Sie Flucht es mit einem anderen %:

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

Beachten Sie, dass in Python 3, auf diese Weise „veraltet“ zugunsten der neueren betrachtet .format() Methode. Sie können auch verwenden, dass man in Python 2.7 (I glauben, obwohl ich nicht sicher bin, dass es in Python 2.6 eingeführt wurde?) Und wie diese das gleiche tun:

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

Oder Sie tun können, auch ausgefallenere Dinge:

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

Check it out! (auch, gibt es eine Reddit thread darüber)

+0

DANKE SEHR VIEL! –

+0

Ja sicher wird! –

+1

Eingeführt in Python 2.6 -> https://docs.python.org/2/whatsnew./2.6.html#pep-3101-advanced-string-formatting – idjaw

2

Vor allem, wenn Sie % drucken möchten Sie es wie diese

tun müssen

%% -> entgeht dem % Literalzeichen

alle anderen Kombinationen als formatierte Zeichen behandelt werden. zum Beispiel %c wird als ein einzelnes Zeichen behandelt, dargestellt als C int.

entnehmen Sie bitte den Link here

+0

DANKE SEHR VIEL! –

+1

Danke für die Bearbeitung @idjaw –

+0

@AjayPal du bist willkommen. – idjaw

2

die % in Python zu entkommen, nur %% verwenden, in Ihrem Beispiel folgende gibt das gewünschte Ergebnis,

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

Oder könnten Sie Zeichenfolge der verwenden Format-Methode, die in Python 3 bevorzugt und auch in Python verfügbar ist 2.7

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

Ein Tipp für Sie zu trans es von % Format formatieren, um Formatformat Methode, AFAIK, alle % Format Buchstaben bleiben die gleichen verwendet in String-Format-Methode.Dies bedeutet, "%s" % "lat" würde einfach "{0:s}".format("lat"), "%d" % 3 zu "{0:d}".format(3) werden usw. Beachten Sie die 0 hier. Es zeigt an, welche Parameter in der format Methode formatiert ist, mit dem ersten Parameter als 0 indiziert

mehr Details hier auf der offiziellen Dokumentation finden Sie über python string's format method

+1

Herzlichen Glückwunsch zu Ihrer ersten Antwort! :) Nur eine freundliche Notiz, um die Formatierungswerkzeuge bei der Beantwortung von Fragen zu nutzen. Ich habe mir die Freiheit genommen, Ihre Antwort zu bearbeiten, um sie entsprechend zu formatieren. Aber wenn Sie Ihre Antwort bearbeiten, werden Ihnen einige Tools zur Verfügung stehen, um Ihre Antwort zu formatieren. :) Prost. – idjaw

+1

Vielen Dank für die Tipps, @idjaw! bemerken Sie einfach die Verwendung der Abschriften-Syntax hier! – woodstonelee

1

neben% Flucht. Sie können auch die ‚%‘ in der ‚lat‘, bevor es oder fügen Sie einfach einen weiteren ‚% s‘ vorbei für ‚%‘

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

im nur geben Sie eine andere option.but hinzufügen %% Flucht ist der beste Auswahl

+0

omg sir Dekan Christian Armada, froh, Sie hier zu sehen ..: D hoffe, Sie erinnern sich an mich. –