Formatierungsoperatoren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Sonntag 19. November 2006, 22:10

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Sonntag 19. November 2006, 22:41

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.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Sonntag 19. November 2006, 22:47

...jaja, ist mir schon klar, die Frage galt dem Sinn der Operatoren.

rolgal_reloaded
BlackJack

Sonntag 19. November 2006, 22:59

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.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Sonntag 19. November 2006, 23:07

@BlackJack

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

LG

rolgal_reloaded
BlackJack

Sonntag 19. November 2006, 23:24

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.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Montag 20. November 2006, 00:03

...egal, wenn ich es besser formulieren kann, melde ich mich nochmal.

Danke, einstweilen,

rolgal_reloaded
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 20. November 2006, 11:46

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten