Seite 1 von 1

python object type überprüfen

Verfasst: Montag 28. November 2011, 10:52
von monternet
Hallo,

ich habe ein python object durch Aufruf der Funktion PyRun_String() bekommen. Wie kann ich bzgl. des Types des Objekts überprüfen und dann die entspechende Funktion aufrufen, um die Info vom Objekt rauszubekommen? Hier habe ich folgenden Befehl verwendet:

Code: Alles auswählen

objecttype = PyObject_Type(pResult);
Dann sollte ich weiter den Type von objecttype überprüfen mit mehrere "if" statments? Wenn es stimmen würde, dann wäre ist Funktion PyObject_Type(PyObject *o) unsinn, finde ich.

Hat jemand eine Idee, wie ich mit der Typeüberprüfen schnell schaffen kann?


Vielen Dank im Voraus!

Re: python object type überprüfen

Verfasst: Montag 28. November 2011, 11:16
von deets
Laut Dokumentation ist die Funktion eh unsinn, weil man besser mit o->ob_type arbeitet.

Aber dein Problem verstehe ich noch nicht - wie ausser mit einer if-Abfrage (oder switch) moechtest du denn gerne auf deinen Typ reagieren? Wie waere es, wenn du uns erstmal erzaehlst, was du da machst, dann kann man da auch Vorschlaege zu machen.

Re: python object type überprüfen

Verfasst: Montag 28. November 2011, 11:19
von snafu
Suchst du `PyObject_IsInstance()`?

Re: python object type überprüfen

Verfasst: Montag 28. November 2011, 12:58
von monternet
deets hat geschrieben:Laut Dokumentation ist die Funktion eh unsinn, weil man besser mit o->ob_type arbeitet.

Aber dein Problem verstehe ich noch nicht - wie ausser mit einer if-Abfrage (oder switch) moechtest du denn gerne auf deinen Typ reagieren? Wie waere es, wenn du uns erstmal erzaehlst, was du da machst, dann kann man da auch Vorschlaege zu machen.


Hi deets,

was ich eigentlich will, ist das von der Funktion PyRun_String() zurückgeliefert PyObject pResult zu analysieren, bzw. sein Type zu festzustellen, und danach durch die entsprechende Python-C Type-Umwandlungsfunktion den Inhalt von pResult anzuzeigen.

Was ich bis jetzt gemacht habe, ist nur zu "vermuten". d.h, mit mehrere "Type-Check Funktion" mit if Überprüfungen, z.B, PyString_Check, PyInt_Check usw. testen, ob pResult ein String-Object, oder ein Integer-Object ist.

Was ich hierbei fragen möchte, gibt's irgendwelche Python-C Funktion, mit der man sofort das Type von pResult bekommen kann, ohne tausend Mals ausprobieren?

Re: python object type überprüfen

Verfasst: Montag 28. November 2011, 13:59
von deets
Was ist denn bitte schoen "der Inhalt"? Die String-Repraesentation? Dafuer kannst du doch zB PyObject_Print verwenden.

Generell gibt es nichts, womit du um deine if-abfragen rumkommst. Klar, kannst stattdessen ein switch-case machen, aber das ist jetzt ja nicht fundamental anders. Du musst schon fuer alles, was du behandeln willst, explizit etwas ausprogrammieren.

Re: python object type überprüfen

Verfasst: Montag 28. November 2011, 14:03
von snafu
Was ist denn dein übergeordnetes Ziel? Baust du eine Shell, wo beliebige Eingaben gemacht werden können und dabei eben alle möglichen Objekttypen als Ergebnis rauskommen können? Anscheinend geht dir ja im Grunde gar nicht um eine Typprüfung, sondern einfach nur um den Ergebniswert. Soll denn in Abhängigkeit vom Ergebnis noch irgendwas damit gemacht werden? Reicht dir am Ende vielleicht sogar ein stumpfes `PyObject_Str()` aus? Du musst schon ein paar mehr Hintergrundinfos geben, damit man dir sinnvoll helfen kann. Und zwar vor allem etwas dazu, *was* du willst und weniger *wie* du es bisher machst. Du hast ja bis jetzt eher die Teilschritte beschrieben, von denen du glaubst, dass sie nötig sind, um dein Ziel zu erreichen. Wir wissen aber noch nicht, was dieses Ziel überhaupt genau sein soll. ;)

Re: python object type überprüfen

Verfasst: Dienstag 29. November 2011, 09:56
von monternet
Hallo snafu, deets,

danke für die Idee!

Also, ich wollte eigentlich durch embedded Python Python Code aufrufen. Nun weiss ich, was die Python Funktionen zurückliefern, die ich aufrufen möchte. Dann brauche ich nicht zu raten, sondern einfach zu überprüfen, ob die Rückgabe den entsprechenden Typ hat.

Vorher wusste ich nicht, wie die Rückgabe aus Python seite aussieht. Deshalb musste ich immer erst festlegen, welchen Typ die Rückgabe PyObject hatte. Dann wurde mit der Konvertierungsfunktion der entsprechenden Rückgabewert angezeigt.