[Python-de] urllib2 und tarfile

Diez Roggisch deets at web.de
Mo Mär 11 15:33:26 CET 2013


>>

>>Das Problem ist, dass das Objekt nur Datei-ähnlich ist und keine Datei
>>ist.
>
>Das hört sich nach einer Falle des Duck-typing an: Woher soll man das
>wissen, wenn man so ein Objekt -- vertrauend auf die Dokumentation --
>verwenden will? Und wer garantiert mir, dass es in Python-n+1 immer noch
>so ist?

Ja, sowas kann passieren. Und dafuer hast du dann in anderen streng
typisierten Sprachen die

FileLikeObjectWithoutTellButLengthFactoryImplGeneratorRegistry

Und wehe eine Bibliothek ist nicht ultravorsichtig so geschrieben, dass
sie auch immer 100% nur das minimal notwendige Interface bedient.

>
>> Sockets sind grundsätzlich nicht seek-able, da es sich um streams
>> handelt und nicht im Block-IO. Darum implementieren die Objekte kein
>> tell() und seek().
>
>Ich bekomme ja nicht einen Socket zurück, sondern eine "addinfourl"
>(sagt die Exception), oder ein file-like object (sagt die
>Dokumentation). Dass es sich dabei um ein nicht-seekable Socket handelt,
>ist dem nicht zu entnehmen, und kann auch implementationsabhängig sein.

Ja, darum ist es ja auch file-like. Und nicht file. Google mal nach leaky
abstractions. Gibt's überall.

>
>An manchen Stellen ist Python doch echt Sch*.

Wie so ziemlich alles im Leben. Ausser Schokolade.

>
>> Das TAR-Module kann auch mit Streams umgehen, wenn man den richtigen
>> Modus verwendet:
>> tar = tarfile.open(fileobj=response, mode = "r|*")
>
>Danke, das werde ich verwenden.

Und nach all dem Genöle gibt's ne einzeilige Lösung - aber Python ist echt
Scheisse. 

Nunja, alles andere hätte mich auch gewundert.

Diez





Mehr Informationen über die Mailingliste python-de