Seite 1 von 1

Formatierungsoperatoren

Verfasst: Sonntag 19. November 2006, 22:10
von rolgal_reloaded
Hallo zusammen,

%s udgl. Sind die nur dazu da, damit man Ausgaben gestalten kann, oder haben sie auch einen Sicherheitssinn?

Ich meine, weil ich genau festlegen kann, welcher Datentyp eingefügt werden kann.

Liebe Grüße

rolgal_reloaded

Verfasst: Sonntag 19. November 2006, 22:41
von birkenfeld
Lies die Doku. %s konvertiert alles zu einem String, d.h. es kommt immer etwas heraus, es sei denn, __str__ wirft eine Exception.
Andere Typen, z.B. %i oder %f, lassen nur ints bzw. floats, oder was dazu konvertiert werden kann, zu.

Verfasst: Sonntag 19. November 2006, 22:47
von rolgal_reloaded
...jaja, ist mir schon klar, die Frage galt dem Sinn der Operatoren.

rolgal_reloaded

Verfasst: Sonntag 19. November 2006, 22:59
von BlackJack
Der Sinn ist zum einen dass man das Format noch etwas genauer angeben kann, zum Beispiel die Anzahl der (Nach)Kommastellen bei Fliesskommazahlen und zum anderen kann man ganze Sätze mit "Platzhaltern" versehen als *eine* literale Zeichenkette schreiben, was das übersetzen mittels `gettext` einfacher macht als wenn man den Text über mehrere Literale verteilt.

Verfasst: Sonntag 19. November 2006, 23:07
von rolgal_reloaded
@BlackJack

...aber hat es auch einen Sinn bez. Sicherheit, weil man eben genau definieren kann welcher Datentyp eingesetzt werden muss?

LG

rolgal_reloaded

Verfasst: Sonntag 19. November 2006, 23:24
von BlackJack
Ich verstehe nicht so ganz was Du mit Sicherheit meinst!?

Die Umwandlung ist halt einfacher. Wenn Du zum Beispiel ein beliebiges Objekt als ganze Zahl formatieren willst, kannst Du entweder ``"%d" % obj`` oder ``str(int(obj))`` schreiben. Mit Formatoperator ist es kürzer und Du kannst noch zusätzliche Angaben zur Formatierung machen. Wenn `obj` sich nicht in eine ganze Zahl umwandeln lässt, dann gibt's in beiden Fällen die gleiche Ausnahme.

Verfasst: Montag 20. November 2006, 00:03
von rolgal_reloaded
...egal, wenn ich es besser formulieren kann, melde ich mich nochmal.

Danke, einstweilen,

rolgal_reloaded

Verfasst: Montag 20. November 2006, 11:46
von jens
Der große Vorteil ist, das es einfach übersichtlicher ist ;)

Code: Alles auswählen

# fahrlässig:
print "Bla Blub" + s + "blabla..."

#besser:
print "Bla Blub" + str(s) + "blabla..."

# besser + hübscher:
print "Bla Blub %s blabla..." % s
Wenn nun s nicht ein String ist, dann funktioniert die erste Variante nicht. Ob man damit irgendwelche Sicherheitslücken Produzieren kann, wage ich zu bezweifeln... Auf jeden Fall kommt es zu einem Traceback...