Ich muss überprüfen, ob ich eine Datei in ein Verzeichnis schreiben kann, auf das Benutzer mit Python zeigen.
Gibt es eine Möglichkeit, es im Voraus zu überprüfen? Ich kann versuchen .. Fang für diesen Zweck, aber ich erwarte etwas besser in dem Sinne, dass ich im Voraus überprüfen kann.
Trotz der Behauptung von Jim Brissom ist die Ausnahmebehandlung in Python im Vergleich zu "check ty try" Idiomen nicht billig, wenn Sie erwarten, dass die Sache mehr als ein paar Prozent der Zeit versagt. (Bis zum Ende für eine Ausnahme lesen!) Das Wichtigste dabei ist, dass Sie die Ausnahme trotzdem überprüfen müssen, da sich die Berechtigungen zwischen der Prüfung und Ihrem Schreibvorgang ändern können:
%Vor%os.access und das stat-Modul sind großartig, wenn Sie beispielsweise eine Liste von Ordnern erstellen möchten, die der Benutzer auswählen kann und die ungültige a priori ausschließen wollen. Wenn der Gummi jedoch auf die Straße kommt, ist er kein Ersatz für die Ausnahmebehandlung, wenn das Programm robust sein soll.
Und jetzt die Ausnahme für die Ausnahmen-sind-langsam-Regel: Ausnahmen sind langsam, aber Festplatten sind langsamer. Und wenn Ihre Festplatte besonders stark ausgelastet ist, könnte es sein, dass Sie die Datei, die Sie aus dem OS- oder Festplatten-Cache zwischen dem os.access- und dem offenen Aufruf entfernen möchten. In diesem Fall wirst du eine große Verlangsamung erleben, da du zweimal auf die Festplatte gehen musst (und das kann in diesen Tagen auch Netzwerk bedeuten).
Sie werden wahrscheinlich nichts Besseres oder mehr Pythonisches finden. Pythons Philosophie ist es ist einfacher, um Vergebung zu bitten als um Erlaubnis .
Sie können os.access verwenden, wenn Sie möchten. Gekoppelt mit os.path.isfile , um zu überprüfen, ob Sie eine Datei haben und nicht z.B ein Verzeichnis. Es wird wahrscheinlich Ihnen geben, was Sie brauchen. Der Ausnahmepfad ist viel besser.
Der pythonische Weg besteht darin, darauf zuzugreifen und die Ausnahme zu fangen, wenn sie fehlschlägt.
Wenn Sie es wirklich überprüfen müssen, verwenden Sie os.access
, aber die Ergebnisse sind nicht immer richtig, achten Sie auf Probleme in Vista / Win7 mit UAC, zum Beispiel!
Beispiel:
%Vor%Dies wird Ihnen sagen, wenn Sie Lesezugriff haben.
Tags und Links python exception file-access