PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python.NET - Exception


Marscel
2008-11-04, 23:45:49
Die Software ist wahrscheinlich zu abandoned, aber ich versuchs trotzdem mal. Python.NET (http://pythonnet.sourceforge.net/) korrekt installiert, funktioniert auch im ganz groben schon so, wie es soll. Gibt kaum Dokus, do-it-yourself, aber so siehts auch in ein paar Mailinglisten aus.

Probleme bereitet das Konvertieren von Managed types zu Python types und umgekehrt.

Das simple Beispiel:
PyString pstr = new PyString("Blub");
String mstr = (String)pstr.AsManagedObject(typeof(String));


Verursacht folgende Exception:

http://pcreact.de/misc/pynet.png

managetype.cs ist Teil von Python.NET. Sei es String, Int oder sonst was, immer dasselbe.

Umgekehrt, also PyObject.FromManagedObject(...), wirft ebenso einen Fehler auf.

Irgendeiner Ahnung, warum Exception und viel mehr, wie zu beheben? Mit Speicherfehlern bei C# bin ich auf dem Schlauch. Habe auch schon Theorien bezüglich Thread-Konflikten gelesen, aber bevor ich weiter vergebens suche, vllt. seid ihr klüger.

Python.NET ist letzter SVN snap, VS2008 EE.

Gnafoo
2008-11-05, 00:34:31
Hm offensichtlich ist die Adresse (tp + TypeOffset.tp_flags) ungültig. Der Fehler liegt vermutlich eher in dem Low-Level-Kram (Speicherlayout), welcher der Methode zugrundeliegt. Aber ich fürchte woran das genau liegt wird dir hier auch keiner so richtig beantworten können, ohne sich den Quellcode von Python.NET gründlich anzusehen.

Gibt es einen besonderen Grund, warum es Python.NET sein soll und nicht IronPython? Der letzte Commit ist ja schon 5 Monate her dort.

Marscel
2008-11-05, 11:04:22
Hm offensichtlich ist die Adresse (tp + TypeOffset.tp_flags) ungültig. Der Fehler liegt vermutlich eher in dem Low-Level-Kram (Speicherlayout), welcher der Methode zugrundeliegt. Aber ich fürchte woran das genau liegt wird dir hier auch keiner so richtig beantworten können, ohne sich den Quellcode von Python.NET gründlich anzusehen.

Mist, aber ich schon vermutet. Wenn ich lustig bin, könnte ich also den Funktions-Stack durchdebuggen und gucken, wo der Haken liegt.

Gibt es einen besonderen Grund, warum es Python.NET sein soll und nicht IronPython? Der letzte Commit ist ja schon 5 Monate her dort.

PyObject und Co sahen bisher vertrauter aus. Ich guck mir nochmal IronPython an.

robobimbo
2008-11-05, 18:25:14
Ich glaub die Entwickler von Python.Net sind nun auch bei IronPython, welches mittlerweile ja auch von MS unterstützt wird

Marscel
2008-11-05, 20:10:17
Ich machs zum Glück nur zum Spaß, aber IronPython 1.1 und 2.0 sind ja zwei verschiedene Konzepte. 2.0 benutzt das DLR-Interface.
Steht 1.1 dem - abgesehen von Py2.5- in irgendwas nach? Das Problem ist jetzt gerade, so richtig viel an Dokumentation bzw. Tutorial existiert bisweilen ja nicht, alles noch im RC oder Beta-Stadium.

Die Sache ist, ich will nicht mit Evaluating arbeiten oder bloß Scripte hosten. Die Qualität des Prinzips will ich hier nicht in Frage stellen, aber ich stellte mir vor, in die Python-Dateien ein paar Funktionen zu tun, die dann entweder über Parameter und Rückgabe oder ein Objekt im globalen Scope von Python Operationen im Skriptbereich durchführen.

Gast
2008-11-05, 21:10:07
Kein Try..catch..as?

Marscel
2008-11-05, 22:41:21
Kein Try..catch..as?

In meinem Quelltext? War ein Testschnipsel, Debugger ist doch bequem genug hier.

Ich sitz erst seit kurzem an .NET, aber das und IronPython haben mich jetzt doch erstaunt.
Ein einfacher Funktionspointer in den Scope von Python geschoben und die Skripts kommen auf anhieb damit zurecht. :eek:

Morgen guck ich, wie flott man Objekte in Richtung Python verschieben kann, um Konversion scheint man sich gar nicht mal große Sorgen machen zu müssen.

Gast
2008-11-05, 22:44:37
In meinem Quelltext? War ein Testschnipsel, Debugger ist doch bequem genug hier.

Ich sitz erst seit kurzem an .NET, aber das und IronPython haben mich jetzt doch erstaunt.
Ein einfacher Funktionspointer in den Scope von Python geschoben und die Skripts kommen auf anhieb damit zurecht. :eek:

Morgen guck ich, wie flott man Objekte in Richtung Python verschieben kann, um Konversion scheint man sich gar nicht mal große Sorgen machen zu müssen.

Als ich Try..catch das erste mal sah, hats mich auch umgehauen. Im Prinzip kannst du J E D E Schweinerei damit einbinden. Wenns nicht fluppt - so what? :D

Marscel
2008-11-05, 22:50:42
Ja, ich hab meine neue Rundumsorglos-Allesaufanhieb-Zueinfachumwahrzusein-Programmierumgebung gefunden. :D

Gast
2008-11-05, 22:55:01
Ja, ich hab meine neue Rundumsorglos-Allesaufanhieb-Zueinfachumwahrzusein-Programmierumgebung gefunden. :D

Man kann MS ja einiges vorwerfen, aber nicht diese IDE.

Developers, Developers, Developers, Developers...


(falls es wer nicht kennt: Schau mal auf Youtube nach Ballmer/Developers!)