Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #5144
| From | Stefan Behnel <python-de@behnel.de> |
|---|---|
| Newsgroups | de.comp.lang.python |
| Subject | Re: [Python-de] Migration Python 2 auf 3 |
| Date | 2018-03-16 17:05 +0100 |
| Message-ID | <mailman.112.1521216348.1867.python-de@python.org> (permalink) |
| References | <p8ggsi$96i$1@solani.org> <p8gkmm$bn2$2@solani.org> <af4e9ff0-fd7a-a975-e904-0097b2204cc4@chrisarndt.de> <e3927493-9aa5-c485-df6f-cdc6c0337070@behnel.de> |
Christopher Arndt schrieb am 16.03.2018 um 15:50: > Am 16.03.2018 um 15:35 schrieb Philipp Klaus Krause: >> m = re.match(r'([^/]*)/([^/]*)/([^/]*)/(.*)$', name) >> if (m >= 3): >> >> TypeError: '>=' not supported between instances of '_sre.SRE_Match' and >> 'int' > > Der Python 2 Code benutzt offenbar ein undokumentiertes Verhalten, dass > die Verwendung eines Regular Expression Match Objects im Integer-Kontext > zulässt. Oh, das Verhalten ist durchaus dokumentiert. In Py2 lassen sich alle Objekte grundsätzlich miteinander vergleichen (sofern das nicht explizit überschrieben wird). Also auch ein "SRE_Match" Objekt mit dem int-Objekt 3, was hier wahr ergibt. Das Ergebnis ist definiert und deterministisch, aber ansonsten an den Haaren herbei gezogen. Und da das None-Objekt einfach mal standardmäßig kleiner als alle anderen Objekte ist, ist "None >= 3" eben falsch, so dass die Bedingung falsch wird, wenn der regex-Abgleich fehlgeschlagen ist. Das ist (vermutlich) hier das gewünschte Verhalten, aber eben absolut unsinnig ausgedrückt, da es (wie z.B. auch dein Kommentar zeigt) einen völlig anderen Hintergrund suggeriert. > Die Semantik dessen kann ich nicht genau sagen, aber ich > vermute mal, dass es dem Attribut 'lastindex' eines Match Objects > entspricht. Nein. Ein "SRE_Match"-Objekt hat keine spezielle Implementierung für den Wahrheitswert, für Vergleiche, oder für eine Länge. Es ist reiner Zufall, dass in diesem Fall das Standardverhalten von Objektvergleichen in funktionierendem Code resultiert. Bei anderen Objekttypen kann das Ergebnis durchaus anders ausfallen. Dieses Verhalten war übrigens einer der von Anfang an ganz klaren Kandidaten für eine Korrektur in Py3, wo verschiedene Objekte jetzt nur noch auf Gleichheit, aber nicht mehr auf eine Ordnung hin testbar sind. Also beispielsweise auch nicht mehr einfach so sortierbar in einer heterogenen Liste. Weil die Fälle, in denen das Bugs produziert, klar die überwiegen, in denen das Verhalten hilfreich ist. Stefan
Back to de.comp.lang.python | Previous | Next — Previous in thread | Find similar
Migration Python 2 auf 3 Philipp Klaus Krause <pkk@spth.de> - 2018-03-16 14:29 +0100
Re: [Python-de] Migration Python 2 auf 3 Christopher Arndt <chris@chrisarndt.de> - 2018-03-16 14:44 +0100
Re: [Python-de] Migration Python 2 auf 3 Hartmut Goebel <h.goebel@crazy-compilers.com> - 2018-03-16 14:44 +0100
Re: [Python-de] Migration Python 2 auf 3 Philipp Klaus Krause <pkk@spth.de> - 2018-03-16 15:32 +0100
Re: Migration Python 2 auf 3 Philipp Klaus Krause <pkk@spth.de> - 2018-03-16 15:35 +0100
Re: [Python-de] Migration Python 2 auf 3 Stefan Behnel <python-de@behnel.de> - 2018-03-16 15:46 +0100
Re: [Python-de] Migration Python 2 auf 3 Christopher Arndt <chris@chrisarndt.de> - 2018-03-16 15:50 +0100
Re: [Python-de] Migration Python 2 auf 3 Stefan Behnel <python-de@behnel.de> - 2018-03-16 17:05 +0100
csiph-web