Chcę zmienić sposób, w jaki IPython domyślnie obsługuje błędy importu. Kiedy prototypuję coś w powłoce IPython, zazwyczaj zapominam najpierw importować os
, re
lub cokolwiek, czego potrzebuję. Pierwszych kilka wypowiedzi często podążać ten wzór:Import IPython Co mam na myśli
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
Jasne, że to moja wina za to, że złe nawyki i, pewno, w skrypcie lub rzeczywistej program, który ma sens, ale w powłoce Wolałbym że IPython postępuje zgodnie z zasadą DWIM , przez co najmniej próbuje importować to, czego próbuję użyć.
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
Jeśli nie jest to możliwe z waniliowym ipython, co musiałbym zrobić do tej pracy? Czy wrapper kernel jest najłatwiejszą drogą do przodu? Czy też powinno to zostać zaimplementowane bezpośrednio w rdzeniu za pomocą magicznego polecenia?
Uwaga, różni się to od those kind of question, gdy ktoś chce zawsze ładować wstępnie zdefiniowane moduły. Ja nie. Bo nie wiem, co będę w pracy, a ja nie chcę, aby załadować wszystko (ani nie chcę, aby utrzymać listę wszystko zaktualizowanej
_Currently, skrypt INFI nite-loops na niektórych błędach_ - jeśli import powoduje NameError i rutynę czyszczenia robi ten sam import ... - już wiesz, co się dzieje. Musisz sprawdzić, czy moduł, który próbujesz zaimportować, istnieje. –
@Rogalski Jak to zrobić? Wiem, że 'pip' ma metody, ale ktoś może importować coś, co jest na ich komputerze lokalnym. –
Uruchom: 'try: importuje cokolwiek z wyjątkiem ImportError: oops_failed_to_import_handle_it()'? –