From: Andrea <mar...@go...> - 2009-07-24 20:09:18
|
Hi, I've managed to reproduce the bug in the debugger in NetBeans =============================================== import sys def printTrace(frame, event, arg): if (event == 'exception'): print arg print 'Arg size=', len(arg) print arg[2] # <<<<<<<<<<<<<<<<<<<<<<< THIS FAILS EVEN IF len(arg)==3 return printTrace def foo(): print 'Here foo' sys.settrace(printTrace) foo() import threading try: dir(pippo) except: print "Error caught" The output is Here foo (<type 'exceptions.GeneratorExit'>, None, null) Arg size= 3 (<type 'exceptions.IndexError'>, 'index out of range: 2', <traceback object at 0x1>) Arg size= 3 <traceback object at 0x1> (<type 'exceptions.IndexError'>, 'index out of range: 2', <traceback object at 0x2>) Arg size= 3 <traceback object at 0x2> Traceback (most recent call last): File "/home/andrea/foo/j.py", line 16, in <module> import threading File "/home/andrea/projects/java/jython2.5.0/Lib/threading.py", line 12, in <module> from traceback import print_exc as _print_exc File "/home/andrea/projects/java/jython2.5.0/Lib/traceback.py", line 5, in <module> import types File "/home/andrea/projects/java/jython2.5.0/Lib/types.py", line 54, in <module> GeneratorType = type(g()) File "/home/andrea/foo/j.py", line 7, in printTrace print arg[2] IndexError: index out of range: 2 Reading http://docs.python.org/library/sys.html, the 3rd argument (arg), for the event='exception' should have 3 values, and indeed there are 3 values, but the last is "null" which seems to cause problems. Sometimes though the 3 values are ok. Cheers Andrea |
From: Philip J. <pj...@un...> - 2009-07-24 20:27:45
|
On Jul 24, 2009, at 1:08 PM, Andrea wrote: > > File "/home/andrea/foo/j.py", line 7, in printTrace > print arg[2] > IndexError: index out of range: 2 > > > Reading http://docs.python.org/library/sys.html, the 3rd argument > (arg), for the event='exception' > should have 3 values, and indeed there are 3 values, but the last is > "null" which seems to cause > problems. > Sometimes though the 3 values are ok. Thanks for narrowing this down, that's definitely a bug. Could you please log a ticket on our bug tracker for it? -- Philip Jenvey |
From: Andrea <mar...@go...> - 2009-07-26 15:30:08
|
On 24/07/09 21:27, Philip Jenvey wrote: > On Jul 24, 2009, at 1:08 PM, Andrea wrote: >> File "/home/andrea/foo/j.py", line 7, in printTrace >> print arg[2] >> IndexError: index out of range: 2 >> >> >> Reading http://docs.python.org/library/sys.html, the 3rd argument >> (arg), for the event='exception' >> should have 3 values, and indeed there are 3 values, but the last is >> "null" which seems to cause >> problems. >> Sometimes though the 3 values are ok. > > Thanks for narrowing this down, that's definitely a bug. Could you > please log a ticket on our bug tracker for it? http://bugs.jython.org/issue1412 Other that this bug, the output of jython is very different wrt python. Does it matter? |
From: Andrea <mar...@go...> - 2009-07-26 17:29:13
|
On 26/07/09 16:29, Andrea wrote: > On 24/07/09 21:27, Philip Jenvey wrote: >> On Jul 24, 2009, at 1:08 PM, Andrea wrote: >>> File "/home/andrea/foo/j.py", line 7, in printTrace >>> print arg[2] >>> IndexError: index out of range: 2 >>> >>> >>> Reading http://docs.python.org/library/sys.html, the 3rd argument >>> (arg), for the event='exception' >>> should have 3 values, and indeed there are 3 values, but the last is >>> "null" which seems to cause >>> problems. >>> Sometimes though the 3 values are ok. >> Thanks for narrowing this down, that's definitely a bug. Could you >> please log a ticket on our bug tracker for it? > > http://bugs.jython.org/issue1412 > > Other that this bug, the output of jython is very different wrt python. > Does it matter? I wanted to try to debug it. Anybody can tell me where is sys.settrace()? I cant seem to find it. |
From: Andrea <mar...@go...> - 2009-07-27 09:14:10
|
Philip Jenvey <pjenvey <at> underboss.org> writes: > > > On Jul 24, 2009, at 1:08 PM, Andrea wrote: > > > > File "/home/andrea/foo/j.py", line 7, in printTrace > > print arg[2] > > IndexError: index out of range: 2 > > I've tried to access the element from Java and got the same error. Basically the elements of a PyTuple are not allowed to be null (as in Java null). The same seems true in Jython (but I cannot debug much, I've only read the source code). The null-check is performed in SequenceIndexDelegate.checkIdxAndGetItem() (for Jython) and in PyTuple.get() (for Java, which raises a Null Pointer Exception). Now, before I find the source of this null, I have some questions: 1) is null a valid value for an element of a PyTuple? 2) Should it be automatically converted to None? 3) Should PyTuple throw when such an element is found (either at creation or if someone sets it?), or only when one tries to use it? 4) More generally, what is the relationship between null and None? Andrea |