Jaka jest precyzyjna reguła, w której ten wyjątek jest podniesiony przez tłumacza Pythona 3?

Istnieje wiele pytań dotyczących tego, z doskonałymi odpowiedziami, ale nie mogłem znaleźć tego, co dało wyraźną, ogólną i logicznie precyzyjną definicję okoliczności, gdy wystąpi ten wyjątek.

Dokumentacja też nie jest jasna. To mówi:

wyjątek ImportError

podniesiony, gdy instrukcja importowa nie znajdzie definicja modułu lub gdy from ... import nie znajdzie nazwy to ma być importowane.

Ale wydaje się to niezgodne z poniższym przykładem.

Chciałem poprosić o ogólną definicję, a nie konkretny przypadek, ale wyjaśnić moje obawy, oto przykład:

# code/t.py:
from code import d

# code/d.py
from code import t

Uruchamianie modułu t.py z wyników linii poleceń w ImportError: cannot import name d.

Z drugiej strony poniższy kod nie podnosi wyjątków:

# code/t.py:
import code.d

# code/d.py
import code.t

Przez cały czas __init__.py jest pusty.

W tym przykładzie jedynymi modułami lub nazwami wymienionymi w instrukcji importu są t i d i były one wyraźnie znaleźli. Jeśli dokumentacja oznacza, że nie ma modułu w d, na pewno nie jest oczywiste; I na górze spodziewałbym się, że podnosimy wyjątek NameError: name ... is not defined, a nie ImportError.

2
max 24 wrzesień 2012, 03:11

2 odpowiedzi

from abc import xyz

Jest równoznaczne z działaniem

xyz = __import__('abc').xyz

Ponieważ jeśli tylko import abc abc.xyz nie będzie istnieć bez oddzielnego importu (chyba że {x2}} zawiera wyraźny {x3}} dla xyz), co ty widzenie jest oczekiwane zachowanie.

1
Charles Duffy 24 wrzesień 2012, 00:17

Problem polega na abc jest predefiniowanym standardowym modułem biblioteki i wystarczy tworzyć podkatalog tej samej nazwy z {X1}} w nim nie zmienia tego faktu. Zmień nazwę pakietu do czegoś innego, zmieniając nazwę folderu {{x2}

0
martineau 24 wrzesień 2012, 07:10