Python3 & 2: DocTests...

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich versuche gerade bei python-creole die Python 2 und 3 Unterstützung ohne 2to3 Konvertierung umzusetzen, siehe: http://python3porting.com/noconv.html

Ich habe das Problem mit DocTests die in Python 2 sowas wie u'foo' zurück liefern und in Python 3 einfach nur 'foo'.

Ideen dazu?

EDIT: Lösung aus http://mail.python.org/pipermail/python ... 01477.html (Allerdings nur für das 2to3 tool):

Code: Alles auswählen

>>> foo() == u'foo'
True
oder mit einem hack, test runner sys.displayhook auszutauschen.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm. Eigentlich nutzte ich ja from __future__ import unicode_literals, von daher sollte das eigentlich gehen. Allerdings nutzt DocTest repr() und das wird nicht von unicode_literals geändert. Also hat man ein Problem.

Siehe auch: http://bugs.python.org/issue3955

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens: Gibt es irgendeine Grund, warum Du auf 2to3 verzichten möchtest? Man muss sich das Leben schließlich nicht schwerer als nötig machen…
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Weil die Hürde in meinem Falle nicht sonderlich hoch ist Python 2 und 3 gleichzeitig zu unterstützten...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also in meinem Falle funktioniert auch ein simpler hack:

Code: Alles auswählen

if not PY3:
    # Simple remove 'u' from python 2 unicode repr string
    origin_OutputChecker = doctest.OutputChecker

    class OutputChecker2(origin_OutputChecker):
        def check_output(self, want, got, optionflags):
            got = got.replace("u'", "'").replace('u"', '"')
            return origin_OutputChecker.check_output(self, want, got, optionflags)

    doctest.OutputChecker = OutputChecker2

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

jens hat geschrieben:Weil die Hürde in meinem Falle nicht sonderlich hoch ist Python 2 und 3 gleichzeitig zu unterstützten...
Wie Du meinst… doch Du hattest schon zwei Probleme zu lösen, die Du mit 2to3 nicht gehabt hättest. Mit "distribute" ist es auch nicht weiter schwierig, "2to3" automatisch bei der Installation ausführen zu lassen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ja, aber schau dir https://github.com/jedie/python-creole/ ... 3compat.py an, ich brauche nicht wirklich viel, um die Kompatibilität von 2.6-3.2 her zu stellen...

OK, wenn ich auch noch 2.5 unterstützten möchte, dann wäre 2to3 wohl unverzichtbar... Siehe dazu parallel Thread: Welche Python Versionen unterstützen?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens: Mit distribute reicht "setup(use2to3=True)" um Python 3 und Python 3 zu unterstützen :)
Antworten