Warum sollte ein PyObject nicht erstellt werden können?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Freitag 17. September 2010, 21:26

Hallo.
Mal eine Frage: Ist es wirklich nötig, nach jedem Py<X>_New eine Abfrage zu machen, ob der resultierende PyObject-Pointer NULL ist?
Es nervt mich nämlich ziemlich, dass ich für jedes Objekt dass ich erstelle immer Abfragen mache, und jedes mal eine Exception zu erstellen wenn was schief läuft.

Deshalb meine Frage: Welche realistischen Gründe sollte es geben, dass die Erstellung eines neuen Objektes fehlschlägt?

Hier ist meine (unvollständige und bescheidene) Liste:
  • Kein Speicher mehr vorhanden (durch Memory-Leak oder RAM ist schlichtweg zu klein)
Mehr fällt mir auf Biegen und Brechen nicht ein; und wenn dieser Fall eintritt, ist es eh egal was passiert, das Programm wird so oder so auf kurze oder lange Sicht abstürzen, vermutlich kann nicht einmal mehr die Exception erstellt und geworfen werden.

Ist es also wirklich nötig, die Rückgabe immer auf NULL zu prüfen?

Gruß
Grüßle.
BlackJack

Freitag 17. September 2010, 22:21

@Chrisber: Das mit dem <X> ist vielleicht zu allgemein an der Frage. An den Argumenten könnte zum Beispiel etwas nicht stimmen. Oder `PyInstance_New()` ruft ja die `__init__()` auf bzw. `__new__()` und vielleicht auch Metaklassencode. Da kann sonstwas schief gehen.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Freitag 17. September 2010, 22:38

Hi,
ja, da hast du recht. War vielleicht etwas zu allgemein.
Ich meinte eigentlich nur Objekte, die keinen Code in Scripten ausführen, also z.B. PyInt_New, PyList_New oder PyDict_New.

Gruß
Grüßle.
lunar

Samstag 18. September 2010, 10:19

@Chrisber: Wenn Du nicht sicher bist oder nicht sicher sein kannst, ob die Erzeugung des Objekts funktioniert hat, dann prüfe den Rückgabewert. Natürlich ist das lästig, aber so ist C nun mal.
Antworten