cStringIO <-> StringIO

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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 15. Mai 2007, 16:19

Wir hatten letztens erst da Thema warum man nicht einfach das machen sollte:

Code: Alles auswählen

try:
    import cStringIO as StringIO
except ImportError:
    import StringIO
Bin gerade über etwas gestolpert. Normalerweise geht das:

Code: Alles auswählen

import StringIO

buffer = StringIO.StringIO()
print isinstance(buffer, StringIO.StringIO)
Das geht allerdings nicht:

Code: Alles auswählen

import cStringIO as StringIO

buffer = StringIO.StringIO()
print isinstance(buffer, StringIO.StringIO)
Denn: TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

Mein konkretes Problem damit löse ich aber ganz ohne isinstance() ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Dienstag 15. Mai 2007, 17:19

jens hat geschrieben:Wir hatten letztens erst da Thema warum man nicht einfach das machen sollte:

Code: Alles auswählen

try:
    import cStringIO as StringIO
except ImportError:
    import StringIO
Natürlich macht man das nicht. Warum zum Teufel sollte das irgendwas bringen?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Dienstag 15. Mai 2007, 17:50

Weil man mit Jython `cStringIO` nicht importieren kann!?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Dienstag 15. Mai 2007, 17:55

Tja, Jython... wer auf Jython lauffähigen Code schreiben muss, der muss auf so viele andere Features verzichten, dass er auch gleich StringIO nehmen kann.

Fakt ist jedenfalls, dass cStringIO und StringIO zwar das gleiche Interface, aber nicht die gleiche Funktionalität bieten.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 16. Mai 2007, 07:02

Ist es denn normal, das man nicht isinstance() bei cStringIO verwenden kann?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 16. Mai 2007, 07:17

Was heißt "normal"? cStringIO.StringIO ist halt eine Factory-Funktion, da je nachdem, ob du einen String mitgibst oder nicht, eine andere Klasse instanziert wird.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 16. Mai 2007, 08:40

Naja, was im Hintergrund passiert ist mir eigentlich egal :)

Wie bekomme ich raus, ob ein Objekt nun ein cStringIO ist oder nicht? Am besten sogar ob ein Objekt cStringIO oder StringIO ist oder nicht.

Ich könnte prüfen ob die Methode getvalue() vorhanden ist. Oder ich greife einfach darauf zu, innerhalb von try-except?

Wobei... Das ist nur ein Gedankliches Problem... Ich mache es ja mittlerweile anders :)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 16. Mai 2007, 13:09

Code: Alles auswählen

>>> dir(cStringIO)
['InputType', 'OutputType', 'StringIO', '__doc__', '__file__', '__name__', 'cStringIO_CAPI']
--> auf InputType (nur lesbar) oder OutputType (auch schreibbar) testen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mittwoch 16. Mai 2007, 14:07

Bzw nicht cStringIO verwenden. Man braucht das relativ selten, meistens tuts StringIO auch, und das kann auch mit unicode.
TUFKAB – the user formerly known as blackbird
Antworten