在Jython中使用inspect.py时遇到的问题
我正在使用一个用Jython开发的应用程序。当我尝试在里面使用inspect.py时,它显示了错误信息。
我的代码是这样的
import inspect,os,sys,pprint,imp
def handle_stackframe_without_leak(getframe):
frame = inspect.currentframe()
try:
function = inspect.getframeinfo(getframe)
print inspect.getargvalues(getframe)
finally:
del frame
#
def raja(a):
handle_stackframe_without_leak(inspect.currentframe())
print a
#
def callraja():
handle_stackframe_without_leak(inspect.currentframe())
raja("raja@ad.com")
#
callraja()
raja("raja@ad.com")
#
当我用python.exe运行这段代码时,没有任何问题。但是在应用程序里面运行时却出现了以下错误
File "C:\Program Files\jython221ondiffjava\Lib\inspect.py", line 722, in getframeinfo
File "C:\Program Files\jython221ondiffjava\Lib\inspect.py", line 413, in findsource
File "C:\Program Files\jython221ondiffjava\Lib\sre.py", line 179, in compile
File "C:\Program Files\jython221ondiffjava\Lib\sre.py", line 227, in _compile
File "C:\Program Files\jython221ondiffjava\Lib\sre_compile.py", line 437, in compile
File "C:\Program Files\jython221ondiffjava\Lib\sre_compile.py", line 421, in _code
File "C:\Program Files\jython221ondiffjava\Lib\sre_compile.py", line 143, in _compile
ValueError: ('unsupported operand type', 'branch')
at org.python.core.Py.makeException(Unknown Source)
at sre_compile$py._compile$1(C:\Program Files\jython221ondiffjava\Lib\sre_compile.py:143)
at sre_compile$py.call_function(C:\Program Files\jython221ondiffjava\Lib\sre_compile.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at sre_compile$py._code$11(C:\Program Files\jython221ondiffjava\Lib\sre_compile.py:421)
at sre_compile$py.call_function(C:\Program Files\jython221ondiffjava\Lib\sre_compile.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at sre_compile$py.compile$12(C:\Program Files\jython221ondiffjava\Lib\sre_compile.py:437)
at sre_compile$py.call_function(C:\Program Files\jython221ondiffjava\Lib\sre_compile.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.core.PyObject.invoke(Unknown Source)
at sre$py._compile$13(C:\Program Files\jython221ondiffjava\Lib\sre.py:227)
at sre$py.call_function(C:\Program Files\jython221ondiffjava\Lib\sre.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at sre$py.compile$8(C:\Program Files\jython221ondiffjava\Lib\sre.py:179)
at sre$py.call_function(C:\Program Files\jython221ondiffjava\Lib\sre.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.core.PyObject.invoke(Unknown Source)
at inspect$py.findsource$24(C:\Program Files\jython221ondiffjava\Lib\inspect.py:413)
at inspect$py.call_function(C:\Program Files\jython221ondiffjava\Lib\inspect.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at inspect$py.getframeinfo$54(C:\Program Files\jython221ondiffjava\Lib\inspect.py:722)
at inspect$py.call_function(C:\Program Files\jython221ondiffjava\Lib\inspect.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.core.PyObject.invoke(Unknown Source)
at custom$py.handle_stackframe_without_leak$4(C:\Program Files\<my app>\jars\custom.py:29)
at custom$py.call_function(C:\Program Files\<my app>\.\jars\custom.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at definitions$py.gotonotificationprofile$122(C:\Program Files\<my app>\.\jars\definitions.py:1738)
at definitions$py.call_function(C:\Program Files\<my app>\.\jars\definitions.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at notificationcases$py.A003$2(C:\Program Files\<my app>\.\jars\notificationcases.py:143)
at notificationcases$py.call_function(C:\Program Files\<my app>\.\jars\notificationcases.py)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.pycode._pyx171.f$0(003:8)
at org.python.pycode._pyx171.call_function(003)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyCode.call(Unknown Source)
at org.python.core.Py.runCode(Unknown Source)
at org.python.util.PythonInterpreter.execfile(Unknown Source)
任何帮助都非常感谢。
谢谢,
Rajasankar
2 个回答
0
这可能会对你有帮助:http://grinder.sourceforge.net/faq.html#re-problems.
如果想快速检查一下,可以试着在 C:\Program Files\jython221ondiffjava\Lib\inspect.py 文件里的 findsource 方法中添加 import re
。
def findsource(object):
"""Return the entire source file and starting line number for an object.
(...snip...)"""
import re
file = getsourcefile(object) or getfile(object)
不过我不能保证一定有效……
1
你有没有试过在命令行上用Jython运行你的程序,也就是不通过应用程序来运行?当我用Jython 2.2.1或者Jython 2.5.0来运行你的程序时,得到的输出和用Python运行时是一样的。