Re: inspect.stack() or inspect.currentframe() gives "list index out of range error"
On 9/25/2010 3:53 AM, deluxstar wrote: The traceback is: 2010-09-25 10:50:38+0300 [-] Traceback (most recent call last): 2010-09-25 10:50:38+0300 [-] File "../appsrv/lqcommon.py", line 983, in getPRMS 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", line 931, in getouterframes 2010-09-25 10:50:38+0300 [-] framelist.append((frame,) + getframeinfo(frame, context)) 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", line 906, in getframeinfo 2010-09-25 10:50:38+0300 [-] lines, lnum = findsource(frame) 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", line 568, in findsource 2010-09-25 10:50:38+0300 [-] if pat.match(lines[lnum]): break 2010-09-25 10:50:38+0300 [-] IndexError: list index out of range It is hard to reproduce the error with a script. I will work and send if I success. If the traceback tells smth, please tell me :) The traceback is terribly difficult to read with the timestamps added. They are not from Python. In the future, please try to suppress them or use a global search/replace (with nothing) before posting such. -- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
Re: inspect.stack() or inspect.currentframe() gives "list index out of range error"
On Samstag 25 September 2010, Steven D'Aprano wrote: > My guess is that you've copied the .pyc file onto the server, > BUT there is also an older version of the .py file there as > well. Because the modification date is older than that of the > .pyc file, Python executes the compiled code from the .pyc > file. that would be horrible - this is what our own legacy software does. A maintenance nightmare. Think adjusting system time or "cp -a spam.py" Actually the docs say something different: The modification time of the version of spam.py used to create spam.pyc is recorded in spam.pyc, and the .pyc file is ignored if these don’t match. found here: http://docs.python.org/tutorial/modules.html -- Wolfgang -- http://mail.python.org/mailman/listinfo/python-list
Re: inspect.stack() or inspect.currentframe() gives "list index out of range error"
On Sat, 25 Sep 2010 00:53:13 -0700, deluxstar wrote: > The traceback is: > 2010-09-25 10:50:38+0300 [-] Traceback (most recent call last): > 2010-09-25 10:50:38+0300 [-] File "../appsrv/lqcommon.py", line 983, > in getPRMS > 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", > line 931, in getouterframes > 2010-09-25 10:50:38+0300 [-] framelist.append((frame,) + > getframeinfo(frame, context)) > 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", > line 906, in getframeinfo > 2010-09-25 10:50:38+0300 [-] lines, lnum = findsource(frame) > 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", > line 568, in findsource > 2010-09-25 10:50:38+0300 [-] if pat.match(lines[lnum]): break > 2010-09-25 10:50:38+0300 [-] IndexError: list index out of range I'm going to take a wild guess here. My guess is that you've copied the .pyc file onto the server, BUT there is also an *older* version of the .py file there as well. Because the modification date is older than that of the .pyc file, Python executes the compiled code from the .pyc file. But when you search for the source code, the old .py file is discovered -- but it doesn't have the right number of lines, and so you end up with an IndexError. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: inspect.stack() or inspect.currentframe() gives "list index out of range error"
On 24 Eylül, 12:39, Peter Otten <__pete...@web.de> wrote: > deluxstar wrote: > > We have an application working on several servers generally written > > with Python 2.6 and Twisted 10. > > The source codes are located in one server and compiled in this > > server. The compiled files are copied to other server via network and > > application server works with these compiled files. > > > In this application, I have to write a function to return a value of > > the caller object that calles this function. The function may be > > called from several modules of the application. To achieve this goal, > > I try to use the python inspect module: > > > curframe = inspect.currentframe() > > calframe = inspect.getouterframes(curframe, 2) > > calframe[1][0].f_locals['variable'] > > > This sample code works on local development environment both on linux > > and windows. When checked in to production environment, > > inspect.currentframe() or inspect.stack() function gives "List index > > out of range error". > > > When I googled, I found only one clue of copying pyc files: > >http://forum.webfaction.com/viewtopic.php?pid=16808 > > > Why inspect modules gives this error? OR Is there another way to get > > the caller objects variable value? > > Can you provide the actual traceback? Provide a small script that reproduces > the error? Add print statements and post their output? > > print inspect.currentframe> curframe = inspect.currentframe() > print curframe > > calframe = inspect.getouterframes(curframe, 2) > > print calframe > > Peter The traceback is: 2010-09-25 10:50:38+0300 [-] Traceback (most recent call last): 2010-09-25 10:50:38+0300 [-] File "../appsrv/lqcommon.py", line 983, in getPRMS 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", line 931, in getouterframes 2010-09-25 10:50:38+0300 [-] framelist.append((frame,) + getframeinfo(frame, context)) 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", line 906, in getframeinfo 2010-09-25 10:50:38+0300 [-] lines, lnum = findsource(frame) 2010-09-25 10:50:38+0300 [-] File "/usr/lib/python2.6/inspect.py", line 568, in findsource 2010-09-25 10:50:38+0300 [-] if pat.match(lines[lnum]): break 2010-09-25 10:50:38+0300 [-] IndexError: list index out of range It is hard to reproduce the error with a script. I will work and send if I success. If the traceback tells smth, please tell me :) Thnx -- http://mail.python.org/mailman/listinfo/python-list
Re: inspect.stack() or inspect.currentframe() gives "list index out of range error"
deluxstar wrote: > We have an application working on several servers generally written > with Python 2.6 and Twisted 10. > The source codes are located in one server and compiled in this > server. The compiled files are copied to other server via network and > application server works with these compiled files. > > In this application, I have to write a function to return a value of > the caller object that calles this function. The function may be > called from several modules of the application. To achieve this goal, > I try to use the python inspect module: > > curframe = inspect.currentframe() > calframe = inspect.getouterframes(curframe, 2) > calframe[1][0].f_locals['variable'] > > This sample code works on local development environment both on linux > and windows. When checked in to production environment, > inspect.currentframe() or inspect.stack() function gives "List index > out of range error". > > When I googled, I found only one clue of copying pyc files: > http://forum.webfaction.com/viewtopic.php?pid=16808 > > Why inspect modules gives this error? OR Is there another way to get > the caller objects variable value? Can you provide the actual traceback? Provide a small script that reproduces the error? Add print statements and post their output? print inspect.currentframe > curframe = inspect.currentframe() print curframe > calframe = inspect.getouterframes(curframe, 2) print calframe Peter -- http://mail.python.org/mailman/listinfo/python-list
inspect.stack() or inspect.currentframe() gives "list index out of range error"
Hi, We have an application working on several servers generally written with Python 2.6 and Twisted 10. The source codes are located in one server and compiled in this server. The compiled files are copied to other server via network and application server works with these compiled files. In this application, I have to write a function to return a value of the caller object that calles this function. The function may be called from several modules of the application. To achieve this goal, I try to use the python inspect module: curframe = inspect.currentframe() calframe = inspect.getouterframes(curframe, 2) calframe[1][0].f_locals['variable'] This sample code works on local development environment both on linux and windows. When checked in to production environment, inspect.currentframe() or inspect.stack() function gives "List index out of range error". When I googled, I found only one clue of copying pyc files: http://forum.webfaction.com/viewtopic.php?pid=16808 Why inspect modules gives this error? OR Is there another way to get the caller objects variable value? Thanks in advance. -- http://mail.python.org/mailman/listinfo/python-list