Generator problem: parent class not seen
Russell E. Owen
rowen at uw.edu
Wed Feb 1 16:00:39 EST 2012
I have an odd and very intermittent problem in Python script.
Occasionally it fails with this error:
Traceback (most recent call last):
File
"/Applications/APO/TTUI.app/Contents/Resources/lib/python2.7/TUI/Base/Bas
eFocusScript.py", line 884, in run
File
"/Applications/APO/TTUI.app/Contents/Resources/lib/python2.7/TUI/Base/Bas
eFocusScript.py", line 1690, in initAll
TypeError: unbound method initAll() must be called with BaseFocusScript
instance as first argument (got ScriptClass instance instead)
self=<ScriptClass object at 0x2066b410>; class hierarchy=[(<class
'TUI.Base.BaseFocusScript.ImagerFocusScript'>, (<class
'TUI.Base.BaseFocusScript.BaseFocusScript'>,)), [(<class 'ScriptClass'>,
(<class 'TUI.Base.BaseFocusScript.ImagerFocusScript'>,))]]
The code looks like this:
def run(self, sr):
try:
self.initAll()
....
except Exception:
traceback.print_exc(file=sys.stderr)
sys.stderr.write("self=%r; class hierarchy=%s\n" % (self,
inspect.getclasstree([type(self)])))
raise
As a detail that may be important: the code is a generator that is being
run by a script runner class (an instance of which is passed into the
run function as argument sr). When the user starts a script the script
runner calls the script's "run" generator. The script runner calls the
run generator again later when conditions are right (e.g. data that is
being waited for arrives, a time limit is reached...). In this case the
failure occurs at the very start of the script, so a yield has not yet
executed.
I am puzzled why Python thinks the class type is wrong, given the output
of inspect.getclasstree. Any ideas on what might be wrong and how to
track it down (and why it would be so intermittent)?
-- Russell
More information about the Python-list
mailing list