Hallo,
ich verzweifle gerade an etwas, was mir absolut nicht einleuchten will. txt ist eine Instanz von socket.error, erzeugt beim Versuch eine Verbindung aufzubauen, die abgewiesen wurde. Ich will genau diesen Fehler abfangen und bin dabei auf Folgendes gestoßen:
txt.args[1]
'Connection refused'
c = 'Connection refused' txt.args[1].startswith(c)
True
txt.args[1].endswith(c)
True
txt.args[1] is c
False
c = txt.args[1] txt.args[1].startswith(c)
True
txt.args[1].endswith(c)
True
txt.args[1] is c
True
Wie geht das? Ich verstehe das einfach nicht.
Grüße
Frank Benkstein.
Frank Benkstein wrote:
txt.args[1]
'Connection refused'
c = 'Connection refused' txt.args[1].startswith(c)
True
txt.args[1].endswith(c)
True
txt.args[1] is c
False
"txt.args[1] is c" wäre wahr, wenn sich beide auf den selben Speicherbereich bezögen. Wenn du auf Gleichheit prüfen willst ist "txt.args[1] == c" der richtige Ausdruck.
c = txt.args[1]
Hier wird "c" zu einem Pointer auf txt.args[1]
txt.args[1].startswith(c)
True
txt.args[1].endswith(c)
True
txt.args[1] is c
True
womit beide auf die selbe Adresse verweisen.
mfg, Fabian
Hallo.
On Mon, 8 Mar 2004 09:10:14 +0100 Fabian Hänsel fabtagon@gmx.de wrote:
Frank Benkstein wrote:
txt.args[1]
'Connection refused'
c = 'Connection refused' txt.args[1].startswith(c)
True
txt.args[1].endswith(c)
True
txt.args[1] is c
False
"txt.args[1] is c" wäre wahr, wenn sich beide auf den selben Speicherbereich bezögen. Wenn du auf Gleichheit prüfen willst ist "txt.args[1] == c" der richtige Ausdruck.
c = txt.args[1]
Hier wird "c" zu einem Pointer auf txt.args[1]
txt.args[1].startswith(c)
True
txt.args[1].endswith(c)
True
txt.args[1] is c
True
womit beide auf die selbe Adresse verweisen.
OK, habe ich auch gedacht, aber:
a = 'Hallo' b = 'Hallo' a is b
True
Du scheinst trotzdem recht zu haben. Das gemeine Python erkennt anscheinend, dass das der String der gleiche ist und allokiert nicht nochmal Speicher...
Danke dir
Frank Benkstein.
On Mon, Mar 08, 2004 at 12:26:29PM +0100, Frank Benkstein wrote:
OK, habe ich auch gedacht, aber:
a = 'Hallo' b = 'Hallo' a is b
True
Du scheinst trotzdem recht zu haben. Das gemeine Python erkennt anscheinend, dass das der String der gleiche ist und allokiert nicht nochmal Speicher...
Das kannst du auch nachpruefen mittels "id(a)" und "id(b)". Der obige Fall ist wahrscheinlich zu kompliziert, so da"s Python einen neuen String anlegt, siehe auch folgendes Beispiel:
s = "Hallo" t = "Hallo, Welt" q = t[0:5]
Jetzt sollte id(s) einen anderen Wert liefern als id(q).
cu, Ulf
lug-dd@mailman.schlittermann.de