Can you file a bug report for this? I'm guessing that the trace code has some bad interaction with LOAD_LOCALS, such that a free variable passed through the class gets treated as local instead. I can reproduce this problem in Python 2.4, so it's a long-standing bug.
Also, as a matter of terminology, there is no currying going on. It's just a problem with closures. Jeremy On 10/1/06, Scott Marks <[EMAIL PROTECTED]> wrote: > The code below exhibits different behavior depending on whether it invokes > sys.settrace ('-t' option) or not. This means that (in a more complicated > case) debugging the code (which uses sys.settrace) makes it fail. Any > ideas? > > """ Demonstrace that tracing messes up curried class definitions """ > > # Some simple command line parsing: -t or --trace means trace, nothing > means don't trace > import sys > > def usage( ): > print 'Usage:', sys.argv[ 0 ], '[-t | --trace]' > sys.exit( 1 ) > > if 1 == len( sys.argv ): > pass > elif 2 == len( sys.argv ): > if sys.argv[ 1 ]=='-t' or sys.argv[ 1 ]=='--trace': > def trace ( frame, event, arg ): > # print frame, event, arg > return trace > sys.settrace( trace ) > else: > usage( ) > else: > usage( ) > > > > # The test: define a class factory with a curried member function > > def the_factory( parm1 ): > class the_class( object ): > def curried( self ): return parm1 > return the_class > > x = the_factory( 42 ) > > y = x( ) > > try: > x.parm1 > print "Failure: x (the manufactured class) has attribute parm1?!" > except AttributeError: > print "Success with the manufactured class!" > > try: > y.parm1 > print "Failure: y (the instance) has attribute parm1?!" > except AttributeError: > print "Success with the instance!" > > assert y.curried( ) == 42, "Currying didn't work?!" > > > _______________________________________________ > Python-bugs-list mailing list > Unsubscribe: > http://mail.python.org/mailman/options/python-bugs-list/jeremy%40alum.mit.edu > > > > _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com