Obecnie używam Pythona 2 w projekcie wymagającym wbudowanego wyjątku Python 3: FileNotFoundError
. Jak mam to zrobić?Jak importować FileNotFoundError z Python 3?
Odpowiedz
Można oczywiście zdefiniować dowolne wyjątki.
Ale oni ci nic nie pomogą. Cały punkt FileNotFoundError
jest taki, że każda operacja w języku Python, która uruchamia się w błędzie nie znaleziono pliku, spowoduje zgłoszenie wyjątku. Samo zdefiniowanie własnego wyjątku nie sprawi, że to prawda. Wszystko, co dostaniesz, to OSError
(lub IOError
, w zależności od wersji 2.x) z odpowiednią wartością errno
. Jeśli spróbujesz obsłużyć niestandardowy FileNotFoundError
, twój program obsługi nigdy nie zostanie wywołany.
Więc, co naprawdę chcesz to (na przykład):
try:
f = open(path)
except OSError as e:
if e.errno == errno.ENOENT:
# do your FileNotFoundError code here
else:
raise
Wygląda na to, że [poprawny wyjątek to IOError] (https://docs.python.org/2/library/exceptions.html#exceptions.IOError). – Mansour
@Mansour: dla 2,6-2,7, dwa są dość czysto podzielone. W starszych wersjach (szczególnie jeśli nie używasz CPython), jest to inna historia (a niektóre rzeczy, takie jak błędy połączenia z gniazdem, to _neither_). Stąd "w zależności od wersji 2.x". Aby być bezpiecznym, zawsze możesz złapać oba, lub (chyba że musisz wrócić do wersji 1.5) ich wspólną podklasę EnvironmentError. – abarnert
Przeczytałem przykład, całkowicie ignorując tekst! – Mansour
Można po prostu utworzyć wyjątek FileNotFoundError
siebie:
class FileNotFoundError(OSError):
pass
Ta nowa klasa wyjątków dziedziczy OSError
podobnie jak jeden w Pythonie 3.x.
Tutaj jest odniesienie na User-defined Exceptions w Pythonie.
Można użyć IOError
zamiast:
Wywoływany w przypadku operacji I/O (takie jak oświadczenie drukującym, wbudowana funkcja open() lub metoda obiektu pliku) nie powiodła się z powodu powodującego wejście/wyjście, np. "file not found" lub "full dysku".
Ta klasa wywodzi się z EnvironmentError. Zobacz powyższą dyskusję, aby uzyskać więcej informacji na temat atrybutów wystąpień wyjątków.
Zmieniono w wersji 2.6: Zmieniono socket.error, aby użyć go jako klasy bazowej.
Czy możesz podać trochę więcej kontekstu? Zazwyczaj odpowiedzi w jednym zdaniu nie są wystarczające w przypadku SO. – sadmicrowave
Link lub cytat do dokumentacji byłby świetny. ^^ To znacznie bardziej inkluzywne +1 – sadmicrowave
Dodałem ofertę. i podświetloną część "nie znaleziono pliku" :-) –
- 1. Jak importować skrypt Python z katalogu rodzeństwa?
- 2. Jak poprawnie utworzyć właściwość FileNotFoundError?
- 3. Jak importować z pliku w bieżącym katalogu w Pythonie 3?
- 4. Jak importować numpy w python shell
- 5. Nie można importować z biblioteki Python Six
- 6. Python: nie można importować JSONDecodeError
- 7. Python - Virtualenv, python 3?
- 8. Nie można importować cProfile w Pythonie 3
- 9. Jak korzystać z flake8 dla Python 3?
- 10. Python 3 - Łączenie z JDBC
- 11. importować plik z innego katalogu
- 12. Jak importować zdjęcia z Facebooka?
- 13. URL Decode z Python 3
- 14. W jaki sposób można importować moduł Python z adresu URL?
- 15. Python 3: jak zainstalować pygame?
- 16. Jak importować Enum
- 17. Python 3 bajty formatowania
- 18. Python 3 - liczby zespolone
- 19. Python 3.x funkcja połączenia z sys.argv []
- 20. jak importować dane do szyn?
- 21. Python 3 zastąpienie ftputil?
- 22. Python 3 string.join() odpowiada?
- 23. Python 3 hosting
- 24. Jak importować plik SDF
- 25. Perl: Jak importować podprogramy z klasy bazowej?
- 26. Jak importować z pliku konfiguracyjnego w kolbie?
- 27. Jak importować keras z tf.keras w Tensorflow?
- 28. Jak eksportować/importować dane z DataGrip?
- 29. importować klasę z folderu na innym poziomie
- 30. Python 3 zamiennik PyFile_AsFile
Nie możesz tego zrobić. Dlaczego samemu nie zdefiniować wyjątku? –
'try' then' except: pass' – Hackaholic
@Hackholicic Err ... no. Dlaczego miałby to robić? –