__blackjack__ hat geschrieben: Mittwoch 20. Mai 2020, 16:42
@Natrium: Die Einrückung der Funktion sieht komisch aus.
Das nackte ``except`` ohne mindestens eine konkrete Ausnahme die da behandelt werden soll ist falsch. Weder der Benutzer noch der Programmierer bekommt hier mit *warum* eine Ausnahme ausgelöst wurde. Das macht Fehlersuche unnötig schwer.
Der rekursive Aufruf von `importierung()` ist falsch. Rekursion ist kein geeignetes Mittel einfache Schleifen zu ersetzen.
Weder `importierung` noch `pfad` sind gute, sinnvolle Funktionsnamen, weil beides keine Tätigkeiten sind. Insbesondere `pfad` wäre ein guter Name für einen Pfad. Den man nun dank der Funktion nicht mehr dafür verwenden kann.
CSV-Dateien haben nur *ein* Trennzeichen. Sollten sie mehrere/verschiedene haben, sind es halt keine CSV-Dateien mehr. Und nein, Programmiersprachen sind kein Wunschkonzert wo man einfach schreibt was man meint und hofft, dass es dann das auch bedeutet. ``or`` ist ein binärer Operator mit je einem Operanden links und rechts und ein Ausdruck ``a or b`` wird entsprechend der Semantik von ``or`` ausgwertet. Entweder zu `a` oder zu `b`, je nachdem ob `a` ”wahr” oder ”unwahr” ist.
Vielen Dank erst einmal für eure beiden Antworten.
Das Try / Except in der Funktion funtkioniert eigentlich einwandfrei - Wird ein falscher Dateipfad eingegeben, muss der User diesen Input korrigieren und einen korrekten Dateipfad eingeben. Da dies ja die Ausnahmefälle sind und diese Funktion maximal wohl 3 Mal wiederholt wird, war ich der Meinung, dass auch ein rekursiver Aufruf okay ist.
Vielen Dank für den Tip - Die Funktionsnamen werde ich noch entsprechend ändern.
Hauptfaktor bei den Trennzeichen ist, dass ich vermeiden möchte, dass der User, welcher die CSV-Datei erstellt, mit falschen Trennzeichen arbeitet.
Sollte der User also ";" statt "," verwenden in der CSVDatei, würde ich das gerne im Vorraus abfangen - sodass "," und ";" beide als Trennzeichen gültig wären.
Ich hätte gedacht, dass csv - Modul hätte bereits eine solche Möglichkeit (multiple delimiters) integriert, was dann aber nicht der Fall zu sein scheint.
Der Operator "or" war auch eher als Beispiel gedacht, um das Problem zu erklären, ist schon klar, dass es innerhalb der Parameter nicht angewendet werden kann.
Frage ist jetzt, wie kann ich verhindern, bzw. dass das Programm reagiert, wenn der User falsche Trennzeichen verwendet?
Derzeit ist es so, dass wenn in der CSV z.B. steht "A;B" - A und B nicht getrennt werden sondern das ganze als String "A;B" komplett übernommen wird.
Danke schon mal!