I just inherited some code which makes me uneasy: There is a testing library, full of classes corresponding to webpages on our site, and each webpage class has methods to a
Please read Sebastian's answer for detailed explanation. This approach was proposed by David Beazley in PyCon
Try positioning the imports on the top like this
try:
from homePageLib import HomePage
except ImportError:
import sys
HomePage = sys.modules[__package__ + '.HomePage']
This will try to import your HomePage
and if failed, will try to load it from the cache
Resolving these constructs usually involves techniques like Dependency Injection.
It is, however, rather simple to fix this error:
In calendarLib.py:
import homePageLib
class CalendarPage(object):
def clickHomePageLink(self):
[...]
return homePageLib.HomePage()
The code at module level is executed at import time. Using the from [...] import [...]
syntax requires the module to be completely initialized to succeed.
A simple import [...]
does not, because no symbols are accessed, thus breaking the dependency chain.