From: Owen N. <on...@gm...> - 2010-08-04 02:33:05
|
A program that succeeds on cpython 2.6 fails for jython 2.5.1 with the diagnostic AttributeError: __len__ where the offending line is: module = __import__(module_path, globals(), locals(), True) The Pydev debugger reveals that neither globals() or locals() have a a value with a __len__ attribute. Is this correct behavior and is there a workaround for this, e.g., by providing runtime flag or option? -- Best, Owen Newnan cell 720 260-5753 http://www.linkedin.com/in/OwenNewnan |
From: Philip J. <pj...@un...> - 2010-08-04 18:59:02
|
On Aug 3, 2010, at 7:32 PM, Owen Newnan wrote: > A program that succeeds on cpython 2.6 fails for jython 2.5.1 with the diagnostic > > AttributeError: __len__ > > where the offending line is: > > module = __import__(module_path, globals(), locals(), True) > > The Pydev debugger reveals that neither globals() or locals() have a a value with a __len__ attribute. Is this correct behavior and is there a workaround for this, e.g., by providing runtime flag or option? You're really calling __import__ incorrectly. Though this works in CPython, CPython is being too lax with the arguments. The 4th arg should be an actual list as stated in the __import__ docs. We've came across this before with __import__, on CPython it even accepts odd things like empty strings for the globals/locals dicts. Don't rely on this, CPython is likely to become more strict in the future. -- Philip Jenvey |
From: Jim B. <jb...@zy...> - 2010-08-04 21:02:33
|
Not to mention that you can just use the simpler form, since you are attempting to use the defaults: module = __import__(module_path) You can also verify that the functions globals and locals both return dictionaries (with type dict as of 2.5.2); they will have the __len__ method defined on them. - Jim On Wed, Aug 4, 2010 at 12:33 PM, Philip Jenvey <pj...@un...>wrote: > > On Aug 3, 2010, at 7:32 PM, Owen Newnan wrote: > > > A program that succeeds on cpython 2.6 fails for jython 2.5.1 with the > diagnostic > > > > AttributeError: __len__ > > > > where the offending line is: > > > > module = __import__(module_path, globals(), locals(), True) > > > > The Pydev debugger reveals that neither globals() or locals() have a a > value with a __len__ attribute. Is this correct behavior and is there a > workaround for this, e.g., by providing runtime flag or option? > > You're really calling __import__ incorrectly. Though this works in CPython, > CPython is being too lax with the arguments. The 4th arg should be an actual > list as stated in the __import__ docs. > > We've came across this before with __import__, on CPython it even accepts > odd things like empty strings for the globals/locals dicts. Don't rely on > this, CPython is likely to become more strict in the future. > > -- > Philip Jenvey > > > > ------------------------------------------------------------------------------ > The Palm PDK Hot Apps Program offers developers who use the > Plug-In Development Kit to bring their C/C++ apps to Palm for a share > of $1 Million in cash or HP Products. Visit us here for more details: > http://p.sf.net/sfu/dev2dev-palm > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > |
From: Owen N. <on...@gm...> - 2010-08-05 00:26:32
|
I am a python newbie so may be missing something obvious; but debugging using the Pydev 1.6 watch facility, it appears neither globals nor locals return a __length__ attribute under jython 2.5. On Wed, Aug 4, 2010 at 3:02 PM, Jim Baker <jb...@zy...> wrote: > Not to mention that you can just use the simpler form, since you are > attempting to use the defaults: > > module = __import__(module_path) > > You can also verify that the functions globals and locals both return > dictionaries (with type dict as of 2.5.2); they will have the __len__ method > defined on them. > > - Jim > > On Wed, Aug 4, 2010 at 12:33 PM, Philip Jenvey <pj...@un...>wrote: > >> >> On Aug 3, 2010, at 7:32 PM, Owen Newnan wrote: >> >> > A program that succeeds on cpython 2.6 fails for jython 2.5.1 with the >> diagnostic >> > >> > AttributeError: __len__ >> > >> > where the offending line is: >> > >> > module = __import__(module_path, globals(), locals(), True) >> > >> > The Pydev debugger reveals that neither globals() or locals() have a a >> value with a __len__ attribute. Is this correct behavior and is there a >> workaround for this, e.g., by providing runtime flag or option? >> >> You're really calling __import__ incorrectly. Though this works in >> CPython, CPython is being too lax with the arguments. The 4th arg should be >> an actual list as stated in the __import__ docs. >> >> We've came across this before with __import__, on CPython it even accepts >> odd things like empty strings for the globals/locals dicts. Don't rely on >> this, CPython is likely to become more strict in the future. >> >> -- >> Philip Jenvey >> >> >> >> ------------------------------------------------------------------------------ >> The Palm PDK Hot Apps Program offers developers who use the >> Plug-In Development Kit to bring their C/C++ apps to Palm for a share >> of $1 Million in cash or HP Products. Visit us here for more details: >> http://p.sf.net/sfu/dev2dev-palm >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users >> > > -- Best, Owen Newnan cell 720 260-5753 http://www.linkedin.com/in/OwenNewnan |
From: Pekka K. <pe...@ik...> - 2010-08-05 22:59:33
|
2010/8/5 Owen Newnan <on...@gm...>: > I am a python newbie so may be missing something obvious; but debugging > using the Pydev 1.6 watch facility, it appears neither globals nor locals > return a __length__ attribute under jython 2.5. Python dicts (and various other objects) have __len__ method, not __length__. You don't typically call it yourself but instead len() built-in or some other function calls it behind the scenes. This is what I get with Jython 2.5.1: $ jython -c "print globals().__len__(), locals().__len__()" 2 2 For more information about __len__ see http://docs.python.org/reference/datamodel.html#emulating-container-types Cheers, .peke -- Agile Tester/Developer/Consultant :: http://eliga.fi Lead Developer of Robot Framework :: http://robotframework.org |