WinPython zeigt Fehler, IDLE läuft durch. WTF?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

Hallo,
ich bin neu hier und Neuling in Sachen Programmierung. Habe mit Hilfe des Forums schon kleinere Programmieraufgaben gelöst. Ich versuche nun die Programme auf einem anderen Rechner zum laufen zu kriegen und bekomme bei einem Programm immer eine Fehlermeldung.
Mit Python 2.6 und IDLE läuft unten aufgeführter Bruchteil vom Code auf meinem Läppi problemlos durch. Mit Python 2.5 und WinPython auf dem feststehenden Rechner bekomme ich schon beim Module Check den syntax Fehler. Erst in der Zeile mit "except EnvironmentError as error: "und wenn ich diese auskommentiere in der darunterfolgenden "output=open(root_path + '\empty_file.txt', "w")". Ich verstehe einfach nicht woran das liegt. Alle anderen Programme die ich habe laufen lassen funktionieren einwandfrei.
Wäre dankbar für Hilfe.
Gruß

Code: Alles auswählen

def clear_path(root_path):
    for the_file in os.listdir(root_path):
        file_path = os.path.join(root_path, the_file)
        try:
            if os.path.isfile(file_path):
                os.remove(file_path)
                print 'Removing', file_path             
        except EnvironmentError as error:     # hier ist angeblich ein syntax error
            print error
        output=open(root_path + '\empty_file.txt', "w")  # und hier
        output.write("\n")
        output.close()
Zuletzt geändert von Anonymous am Montag 25. März 2013, 10:02, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

gottlieb hat geschrieben:

Code: Alles auswählen

        except EnvironmentError as error:     # hier ist angeblich ein syntax error
Nicht nur angeblich. Die Syntax mit as ist die für die Zukunft präferierte, existiert aber bei deiner alten Python-Version noch nicht.

Verwende bei Python 2.5 folgende Syntax:

Code: Alles auswählen

        except EnvironmentError, error:
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

Hier wird einem schnell geholfen!
Vielen vielen Dank, kann dann jetzt weitergehen :)
Gruß
BlackJack

@gottlieb: Warum wird beim Öffnen der leeren Datei nicht `os.path.join()` verwendet? Und das ist an der Stelle auch irgendwie nicht sinnvoll diese Datei zu erstellen. Für jede gelöschte Datei wird immer wieder diese Datei erstellt. Das sollte doch eigentlich *nach* der Schleife und nicht *in* der Schleife passieren, oder‽
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

@ BlackJack,
Und das ist an der Stelle auch irgendwie nicht sinnvoll diese Datei zu erstellen. Für jede gelöschte Datei wird immer wieder diese Datei erstellt.
in dem Fall macht es für tatsächlich für die Funktion keinen Unterschied wo das steht und ist mir deshalb nicht aufgefallen. Habs gerade ausprobiert. Es werden alle Dateien in dem ausgewählten Ordner gelöscht und eine leere .txt Datei erstellt. Natürlich hast du recht, es ist eleganter nach der Schleife, weil sie dann nicht immer wieder beschrieben wird :D...hab das jetzt auch vorgezogen. Danke.
Warum wird beim Öffnen der leeren Datei nicht `os.path.join()` verwendet?
Ganz einfach, weil ich nicht daran gedacht habe, bzw. den Befehl bis dato noch nie verwendet habe.

Und wo wir wieder dabei sind, gibt es bei dem os.listdir Befehl eine Möglichkeit einen Standartordner vorzuwählen, damit er nicht bei jedem Programmstart in die oberste Kategorie springt. Der Pfad wo die Datei selbst liegt würde mir schon reichen.

Gruß
BlackJack

@gottlieb: Du gibst doch bei `os.listdir()` den Pfad an bei dem gestartet werden soll. Das liegt also vollkommen in Deiner Hand.

Falls mit „die Datei selbst” Dein Python-Modul gemeint ist: In Module ist der Name `__file__` an den Dateinamen des Moduls gebunden. Wenn man davon nur den Ordner-Anteil haben möchte, gibt es im `os.path`-Modul diverse Funktionen um Pfade zu zerlegen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

gottlieb hat geschrieben:Und wo wir wieder dabei sind, gibt es bei dem os.listdir Befehl eine Möglichkeit einen Standartordner vorzuwählen, damit er nicht bei jedem Programmstart in die oberste Kategorie springt. Der Pfad wo die Datei selbst liegt würde mir schon reichen.
Du brauchst doch nur den Pfad passend mitzugeben.

Code: Alles auswählen

>>> import os
>>> os.listdir(r'c:\temp')
['-Outlook.pst', 'conf.py', 'index.rst', 'make.bat', 'Makefile', 'upload']
Wenn du den kompletten Pfad zu einer Datei hast, dann hol dir mit os.path.dirname den Ordner.

Code: Alles auswählen

>>> os.listdir(os.path.dirname(r'C:\pyjects\serenity\log\serenity.log'))
['serenity.log', 'serenity.log.1', 'serenity.log.2', 'serenity_debug.log']
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

Ich hab mich schlecht ausgedrückt, sorry. Vorallem fehlt dazu der Rest vom Code :)
Also os.listdir bekommt den Pfad von wx.DirDialog aufgedrückt. Ich hätte also korrekterweise fragen müssen ob es eine Möglichkeit gibt bei wx.DirDialog einen Standartpfad anzugeben.

DefaultDir funktioniert in dem Zusammenhang nicht.

Gruß
BlackJack

@gottlieb: Das Argument heisst ja auch `defaultPath`.
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

Stimmt und läuft, danke!
Antworten