@tany3: Du solltest vielleicht von dem konkreten Projekt mal einen Schritt zurück machen und ein Python-Tutorial durcharbeiten. Natürlich bekommst Du `None`\s, denn das ist nun einmal was zumindest die `BasicBlocks()`-Funktion *zurück* gibt. Funktionen geben nicht das zurück was sie *aus*geben, sondern das was sie mittels ``return``-Anweisung *zurück* geben. Wenn der Programmfluss das Ende einer Funktion erreicht ohne ein explizites ``return`` ausgeführt zu haben, dann kann man sich am Ende jeder Funktion ein implizites ``return None`` vorstellen.
Namen sollten nicht nur aus einem Buchstaben bestehen. Abgesehen von „Zählvariablen” oder solchen die nur innerhalb eines Ausdrucks, zum Beispiel einer „list comprehension” oder eines Generatorausdrucks, verwendet werden, sollen Namen dem Benutzer vermitteln was die Bedeutung der Objekte ist, ohne das er raten muss.
Der Code bei `BasicBlocks()` ist ungünstig organisiert. Wenn `p` an einen „unwahren” Wert gebunden ist, dann kann man sich eigentlich *den gesamten* Ablauf der Funktion sparen. Also sollte man die ``if``\s heraus ziehen oder dieses Flag komplett weglassen und die Entscheidung diese Funktion aufzurufen an den Aufrufer verschieben. Denn der hat dann ja schon das nötige Wissen wenn er das Flag übergeben würde.
Die `long()`-Aufrufe würde ich durch `int()` ersetzen. Der Typ `long` ist nun schon seit längerer Zeit ein „Auslaufmodell”. Es sei denn IDA erzwingt das. Von welchem Typ sind denn die Attribute, die da abgefragt werden?
Deine Probkeme mit Aus- und Rückgabe haben auch etwas damit zu tun, dass Du dort reine Programmlogik und UI im weitesten Sinne miteinander vermischt. Die `BasicBlocks()`-Funktion sollte die Blöcke ermitteln und zurück geben. Ausgabe auf der Konsole und/oder in eine Datei sollte an anderer Stelle, vielleicht sogar in jeweils eigenen Funktionen, passieren.
Bezüglich der Namensgebung solltest Du mal einen Blick in
PEP 8 -- Style Guide for Python Code werfen.