Seite 1 von 1

Python3 & 2: DocTests...

Verfasst: Dienstag 4. Oktober 2011, 13:09
von jens
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.

Re: Python3 & 2: DocTests...

Verfasst: Dienstag 4. Oktober 2011, 16:29
von jens
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

Re: Python3 & 2: DocTests...

Verfasst: Dienstag 4. Oktober 2011, 19:06
von 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…

Re: Python3 & 2: DocTests...

Verfasst: Mittwoch 5. Oktober 2011, 07:11
von jens
Weil die Hürde in meinem Falle nicht sonderlich hoch ist Python 2 und 3 gleichzeitig zu unterstützten...

Re: Python3 & 2: DocTests...

Verfasst: Mittwoch 5. Oktober 2011, 08:15
von jens
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

Re: Python3 & 2: DocTests...

Verfasst: Mittwoch 5. Oktober 2011, 09:24
von 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.

Re: Python3 & 2: DocTests...

Verfasst: Montag 10. Oktober 2011, 11:09
von jens
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?

Re: Python3 & 2: DocTests...

Verfasst: Montag 10. Oktober 2011, 11:49
von lunar
@jens: Mit distribute reicht "setup(use2to3=True)" um Python 3 und Python 3 zu unterstützen :)