@miriane: Um Himmels willen *NEIN*! Vergiss bitte das es ``global`` überhaupt gibt. Das ist keine Lösung und total unsinnig wenn die Funktion den gewünschten Wert doch sowieso schon zurück gibt.
Die zweite Funktion muss die erste Funktion aufrufen. Der Pfad zu der Datei wird von der ersten Funktion ja zurückgegeben.
Die ”Dokumentation” bei den beiden Funktionen ist übrigens nicht so toll. Wie eine Funktion heisst hat nichts mit Syntax zu tun und braucht auch im Docstring nicht noch einmal wiederholt werden. Der Funktionsname steht doch genau da drüber, da kann man ihn auch lesen. Das was Du als Kommentar vor die Funktionen geschrieben hast, gehört in den Docstring. Und die Parameter einfach nur aufzuzählen ist im Grunde genau so unsinnig wie den Funktionamen noch mal in den Docstring zu schreiben solange da nicht eine weitere Erklärung zu den einzelnen Parametern steht, denn *dass* es sie gibt und wie sie heissen sieht man auch ohne die Aufzählung im Docstring. Da die beiden überhaupt nicht verwendet werden, könnte man das Dokumentieren auch einfach sein lassen, und Defaultwerte angeben, so dass man die Funktion auch ohne Argumente aufrufen kann. Dafür könnte man aber den Rückgabewert dokumentieren.
Der Funktionsname ist grauenvoll.
Importe gehören eigentlich an den Anfang des Moduls, damit man leichter sieht wovon ein Modul abhängig ist.
Abkürzungen bei Namen sollte man vermeiden. Hier ist zum Beispiel das `fd` sehr ungünstig, nicht nur weil man an dem Namen nicht erkennen kann was das Objekt im Programm bedeutet, sondern weil ein guter Teil von Programmierern hier sogar irregeführt wird, denn `fd` ist eine gängige Abkürzung für „file descriptor” in anderen Quelltexten. `a` ist auch nicht besser, auch wenn hier keine Verwechslungsgefahr besteht. Der Name ist aber auch überflüssig weil es nicht sinnvoll ist etwas an einen Namen zu binden, nur um den gleich in der nächsten Anweisung mit einem ``return`` zu verwenden.
Bei der Formatierung weicht der Quelltext stellenweise vom
Style Guide for Python Code ab.
Code: Alles auswählen
def ask_for_csv_filename(_sender=None, _button=None):
"""Öffnet einen Dateidialog und lässt den Benutzer einen CSV-Dateinamen
auswählen, der dann zurückgegeben wird.
"""
dialog = win32ui.CreateFileDialog(1, flags=0, filter='Csv |*.csv')
dialog.SetOFNTitle('Select CSV File')
if dialog.DoModal() == win32con.IDCANCEL:
sys.exit(1)
return dialog.GetPathName().replace('\\', '/')
Die Ausnahme beim Abbrechen erzeugst Du ja selbst mit dem `sys.exit()`-Aufruf. Ist auch eher ungewöhnlich das man in einem Dateidialog auf Abbrechen drückt und damit den gesamten Prozess beenden will.