Hi all, 

Scenario: 

I am transitioning a mature tcl package to python. As in interim step in the 
long process, I will use tkinter in a python script to call the tcl code. Since 
I have some common functionality already written in python, I am using the 
createcommand function to expose this to tcl. As a side note, there is no tk in 
this software, only using the tcl piece. Another side note: the useTk=0 
argument appears to have no effect.   

Everything works nicely. However I have found that when the tcl code calls a 
python function and an error occurs in the python, the python error is not 
included in the tcl error stack. I've spent hours hacking away trying to figure 
it out, but now it's time to turn to the community. 

Here's a boiled down script that can be used to reproduce and illustrate:

example 1, this is the best message I can get out of tcl, but doesn't include 
the error that occurs in the "hello" function:

#!/usr/bin/env python
from Tkinter import Tcl

def hello():
    # the error will occur on the following line --->
    print z
    return
tcl = Tcl()
tcl.createcommand('hello', hello)

try:
    tcl.eval('hello')
except Exception as e:
    print tcl.getvar(name="errorInfo")
    raise e

./test.py

    while executing
"hello"
Traceback (most recent call last):
  File "./test.py", line 15, in <module>
    raise e
_tkinter.TclError


Example 2, this is what I would expect the tcl error message to include:

$ python
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print z
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'z' is not defined


The ideal error message would be something like (or with more traceback nesting 
if in a tcl procedure):

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'z' is not defined
    while executing
"hello"
Traceback (most recent call last):
  File "./test.py", line 15, in <module>
    raise e
_tkinter.TclError



Thanks,
Patrick

_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss

Reply via email to