Проблемы с inspect.py при использовании внутри Jython - PullRequest
2 голосов
/ 10 июля 2009

Я использую приложение, разработанное в 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 ]

1 голос
/ 22 июля 2009

Вы пытались запустить вашу программу в командной строке с помощью Jython (так что вне приложения)? Когда я запускаю вашу программу с Jython 2.2.1 или Jython 2.5.0, я получаю такой же вывод, как и с Python.

0 голосов
/ 11 июля 2009

Это может помочь http://grinder.sourceforge.net/faq.html#re-problems.

Для быстрой проверки попробуйте добавить import re в методе findource ( C: \ Program Files \ jython221ondiffjava \ Lib \ inspect.py )


def findsource(object):
    """Return the entire source file and starting line number for an object.
    (...snip...)"""
    import re
    file = getsourcefile(object) or getfile(object)

Ничего не могу обещать, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...