Hi Patrick,

I'm in the process of looking into this for you. As you mentioned, the 
traceback module (e.g. traceback.print_exc()) is the way to go, and it should 
work in 2.6. Which version of IronPython are you using?

As a temporary workaround, you can use the sys module to get most of the same 
functionality; traceback.py is essentially just a pretty-printer for the 
information provided by sys.exc_info. For example, to print the stack trace to 
stderr, you can mimic the interpreter:

import sys
try:
    <bugged code>
except:
    sys.excepthook(*sys.except_info())

To load a string as its own module, it is necessary to mimic the behavior of 
the importer, except that the code is already in memory. You'll want something 
akin to the following helper function:

import imp
def import_string(modulename, filename, source):
    code_obj = compile(source, filename, 'exec')
    scope = imp.new_module(modulename)
    exec(code_obj, scope.__dict__)
    return scope

This should provide the proper filename/lineno debugging information, for 
example:

>>> my_module = import_string('my_module ', '<my_package.zip>\\my_module.py ', 
>>> '\n\n\ndef err():\n  raise SystemError\n\n')
>>> my_module.err()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<my_package.zip>\my_module.py ", line 5, in err
SystemError

Best of luck!

- David

From: [email protected] 
[mailto:[email protected]] On Behalf Of Patrick DeschĂȘnes
Sent: Wednesday, June 03, 2009 10:59 AM
To: [email protected]
Subject: [IronPython] Debugging IronPython scripts + simulate a filename when 
loading a string

Hi,

I'm currently using IronPython to develop extensions to my program.  My python 
scripts are compressed in a zip file along with other resources.

Everything works fine but I would be very happy if I could find a simple way to 
debug my scripts.  I don't want anything complex for now.  If I could only do 
something like this :

try:
   bugged code
except:
   print debug.stack.filename + " : " debug.stack.lineno

It would be perfect.  I looked for the traceback module but it doesn't seems to 
work with IronPython.  Also, since I load my script from a zip file, is there a 
way to
simulate a filename when loading a string.

So, if I could :

a) load a string as if it was a file
b) intercept the filename/linenum in the catch block

That would be a huge improvement.


- Patrick
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to