Bruno Desthuilliers wrote: >>> What's leading you to conclude the import isn't being executed? You >>> realise, I trust, that the module's code will only be executed on the >>> first call to __init__()? >>> >> >> Well. Putting it in a "try" inside __init__() doesn't do anything. > > This would be highly suprising. >
Yes, it is surprising. Unfortunately. :-( Or maybe I'm doing something really dumb. >> The >> import never happens. > > As soon as your running this code on a platform where os.name yields > either 'nt' or 'dos', the import statement is executed. You can bet your > ass on this. Now this import can fail for a lot of reasons (imported > module not in sys.path, error in the imported module, etc), and since > your catching *and dismissing* the ImportError, you don't know what > effectively happens. It's like someone send you mails, you set your > filter to trash mails from this person, and then complain this person > never send you mails !-) > >> And thus if I make a call in any of the methods, it >> fails with an error message. A NameError IIRC. > > "IIRC" ? Inspecting the traceback may help, you know. There's no traceback because the import never happens. Here's what I've captured for you exactly I see on my terminal [EMAIL PROTECTED]:/tmp$ cat rick.py class Log: def __init__(self, verbose, lock = None): self.VERBOSE = bool(verbose) self.lock = bool(lock) if self.lock: self.dispLock = threading.Lock() else: self.dispLock = None if os.name == 'posix': try: import foobar except ImportError, e: print >> sys.stderr, e self.platform = 'posix' self.color = get_colors() elif os.name in ['nt', 'dos']: self.platform = 'microsoft' try: import SomeModule except ImportError, e: # comment out next line before going to prod... print >> sys.stderr, e self.color = None else: self.color = SomeModule.get_colors_windows() else: self.platform = None self.color = None [EMAIL PROTECTED]:/tmp$ python Python 2.4.4 (#2, Jul 21 2007, 11:00:24) [GCC 4.1.3 20070718 (prerelease) (Debian 4.1.2-14)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os, sys >>> os.path.abspath(os.curdir) '/tmp' >>> from rick import Log >>> import rick >>> os.name 'posix' >>> import foobar Traceback (most recent call last): File "<stdin>", line 1, in ? ImportError: No module named foobar >>> For the 'posix' OS, I'm doing an erratic import which should fail and print the error message. See, it prints nothing. This _is_ what has made me conclude that imports aren't executed in __init__(). But hey, they will get executed if you put them in any of the methods (which is again illogical because methods can/are called multiple times). Ritesh -- If possible, Please CC me when replying. I'm not subscribed to the list. -- http://mail.python.org/mailman/listinfo/python-list