Desidero modificare il modo in cui IPython gestisce gli errori di importazione per impostazione predefinita. Quando prototipo qualcosa nella shell IPython, di solito dimentico di importare prima os
, re
o qualsiasi altra cosa di cui ho bisogno. Le prime dichiarazioni spesso seguono questo schema:Imposta IPython Import Cosa intendo
In [1]: os.path.exists("~/myfile.txt")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-0ffb6014a804> in <module>()
----> 1 os.path.exists("~/myfile.txt")
NameError: name 'os' is not defined
In [2]: import os
In [3]: os.path.exists("~/myfile.txt")
Out[3]: False
Certo, è colpa mia per avere cattive abitudini e, sicuro, in uno script o un programma vero e proprio che abbia un senso, ma nel guscio Preferirei che IPython segue il principio DWIM , di almeno cercando per importare ciò che sto cercando di utilizzare.
In [1]: os.path.exists("~/myfile.txt")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-0ffb6014a804> in <module>()
----> 1 os.path.exists("~/myfile.txt")
NameError: name 'os' is not defined
Catching this for you and trying to import "os" … success!
Retrying …
---------------------------------------------------------------------------
Out[1]: False
Se ciò non è possibile con una vaniglia IPython, cosa avrei dovuto fare per fare questo lavoro? È un wrapper kernel il modo più semplice per avanzare? O dovrebbe essere implementato direttamente nel nucleo, con un comando magico?
Nota, questo è diverso da those kind of question dove qualcuno desidera caricare sempre moduli predefiniti. Io non. Cuz Io non so quello che io lavorerò, e io non voglio caricare tutto (né voglio mantenere l'elenco dei tutto aggiornato
_Currently, questo script infi nite-loop su alcuni errori_ - se i risultati dell'importazione in NameError e la routine di pulizia fanno la stessa importazione ... - sai già cosa succede. Devi verificare se il modulo che stai cercando di importare esiste. –
@Rogalski Come potrei farlo? So che 'pip' ha dei metodi per farlo, ma qualcuno potrebbe importare qualcosa che si trova sulla loro macchina locale. –
Esegui: 'prova: importa qualsiasi cosa tranne ImportError: oops_failed_to_import_handle_it()'? –