Attualmente sto usando Python 2 su un progetto che ha bisogno di un'eccezione built-in Python 3: FileNotFoundError
. Come lo faccio?Come posso importare FileNotFoundError da Python 3?
risposta
Naturalmente è possibile definire le eccezioni desiderate.
Ma non ti faranno del bene. L'intero punto di FileNotFoundError
è che qualsiasi operazione Python eseguita in un errore file-not-found genererà quell'eccezione. La semplice definizione della tua eccezione non lo renderà vero. Tutto quello che otterrete è un OSError
(o IOError
, a seconda della versione 2.x) con un valore appropriato errno
. Se si tenta di gestire un numero personalizzato FileNotFoundError
, il gestore non verrà mai chiamato.
Allora, che cosa si vuole veramente è (per esempio):
try:
f = open(path)
except OSError as e:
if e.errno == errno.ENOENT:
# do your FileNotFoundError code here
else:
raise
Sembra che [l'eccezione corretta sia IOError] (https://docs.python.org/2/library/exceptions.html#exceptions.IOError). – Mansour
@Mansour: per 2.6-2.7, i due sono divisi in modo abbastanza netto. Per le versioni precedenti (specialmente se non stai usando CPython), è una storia diversa (e alcune cose, come gli errori di connessione socket, erano _neither_). Quindi "dipende dalla versione 2.x". Per sicurezza, puoi sempre prendere entrambi, o (a meno che non sia necessario tornare indietro alla 1.5) la loro sottoclasse comune EnvironmentError. – abarnert
Ho letto l'esempio, ignorando completamente il testo! – Mansour
Si può semplicemente creare l'eccezione FileNotFoundError
da soli:
class FileNotFoundError(OSError):
pass
Questa nuova classe di eccezione eredita da OSError
proprio come quella in Python 3.x.
Ecco un riferimento su User-defined Exceptions in Python.
Si potrebbe utilizzare IOError
invece:
sollevata quando un'operazione di I/O (ad esempio una dichiarazione di stampa, il funzione open() integrata o un metodo di un oggetto file) non riesce per un motivo relativo all'I/O, ad es. "file non trovato" o "disco pieno".
Questa classe deriva da EnvironmentError. Vedi la discussione sopra per maggiori informazioni sugli attributi delle istanze di eccezione.
Modificato nella versione 2.6: cambiato socket.error per utilizzarlo come classe base.
Puoi fornire qualche altro contesto? Di solito, le risposte a una frase non sono sufficienti su SO. – sadmicrowave
Un link o un preventivo alla documentazione, sarebbe fantastico. ^^ Questo è molto più inclusivo +1 – sadmicrowave
Ho aggiunto la citazione. e ha evidenziato la parte "file non trovato" :-) –
- 1. Come posso importare da un file nella directory corrente in Python 3?
- 2. non può importare Cprofile in Python 3
- 3. Come si genera un errore FileNotFoundError correttamente?
- 4. Come posso importare un modulo di terze parti in Python?
- 5. Impossibile importare Python da un'altra cartella
- 6. Come importare OpenSSL in python
- 7. Python: come importare da tutti i moduli in dir? Struttura
- 8. Come posso importare il modulo sqlite3 in Python 2.4?
- 9. come importare matplotlib in python
- 10. Come importare una classe da unittest in python?
- 11. Come importare le funzioni da altri progetti in Python?
- 12. Come posso importare uno script Python da una directory di pari livello?
- 13. importare un array in python
- 14. Come posso importare sottomoduli di panda senza importare matplotlib?
- 15. Come posso importare l'eccezione DjNo DoesNotExist?
- 16. Python - Virtualenv, python 3?
- 17. Come importare foto da Facebook?
- 18. Che cosa significa "da sei.move importare urllib` do in Python?
- 19. Perché non posso importare nltk?
- 20. Come importare Azure BlobService in python?
- 21. Come posso importare html con php?
- 22. Come posso importare condizionatamente un modulo ES6?
- 23. Impossibile importare il modulo tartaruga in Python 2.xe Python 3.x
- 24. Come posso scaricare un file usando urllib.request in Python 3?
- 25. Posso usare Python 3 super() in Python 2.5.6?
- 26. Esecuzione di Python 3 da Light Table
- 27. Come importare selettivamente il modulo in python?
- 28. Come posso esportare/importare le impostazioni di Sublime Text 3 da un PC a un altro utilizzando Windows?
- 29. Come creare un'estensione Python C in modo da poterla importare da un modulo
- 30. Come posso chiamare 'git pull' da Python?
Non puoi farlo. Perché non definire da solo l'eccezione? –
'try' then' except: pass' – Hackaholic
@Hackaholic Err ... no. Perché dovrebbe volerlo fare? –