due to the lack of a marker that denotes where the module ends and the attribute starts, unrelated import errors can break the try&error chain at unexpected places and the code can pass on to the recursive getattr chain, giving a completely different error instead of the real error this is not solvable without a marker or really nasty hacks o track subsequent imports
to correctly implement it we need the : separator back with the separator the import specification is no longer ambigious, and we can use one exact import, and an error will always be an error
an example of creating a wrong error would be something like the following: there is a package foo.bar, which does a wrong import in __init__.py we want to resolve the name foo.bar.something we'd get the error that foo has no attribute bar