Python 什么是';***最古老的框架';在ipdb中是什么意思?

Python 什么是';***最古老的框架';在ipdb中是什么意思?,python,python-3.x,pdb,ipdb,Python,Python 3.x,Pdb,Ipdb,我试图向服务器发出http请求,并检查返回的内容。但是,当我尝试用ipdb拨动HTTPResponse对象时,我总是得到***最旧的帧,并且我无法在该对象上运行我应该能够运行的任何函数。下面是执行抓取的代码块,以及ipdb输出: 代码块: for acc in sp_lost: url = 'http://www.uniprot.org/uniprot/?query=mnemonic%3a'+acc+'+active%3ayes&format=tab&columns=en

我试图向服务器发出http请求,并检查返回的内容。但是,当我尝试用
ipdb
拨动
HTTPResponse对象时,我总是得到
***最旧的帧
,并且我无法在该对象上运行我应该能够运行的任何函数。下面是执行抓取的代码块,以及
ipdb
输出:

代码块:

for acc in sp_lost:
    url = 'http://www.uniprot.org/uniprot/?query=mnemonic%3a'+acc+'+active%3ayes&format=tab&columns=entry%20name'
    u = urllib.request.urlopen(url)
    ipdb.set_trace()
ipdb> url
'http://www.uniprot.org/uniprot/?query=mnemonic%3aSPATL_MOUSE+active%3ayes&format=tab&columns=entry%20name'
ipdb> u
*** Oldest frame
ipdb> str(u)
'<http.client.HTTPResponse object at 0xe58e2d0>'
ipdb> type(u)
<class 'http.client.HTTPResponse'>
ipdb> u.url                      
*** Oldest frame
ipdb> u.url()         # <-- unable to run url() on object...?
*** Oldest frame
ipdb> 
ipdb输出:

for acc in sp_lost:
    url = 'http://www.uniprot.org/uniprot/?query=mnemonic%3a'+acc+'+active%3ayes&format=tab&columns=entry%20name'
    u = urllib.request.urlopen(url)
    ipdb.set_trace()
ipdb> url
'http://www.uniprot.org/uniprot/?query=mnemonic%3aSPATL_MOUSE+active%3ayes&format=tab&columns=entry%20name'
ipdb> u
*** Oldest frame
ipdb> str(u)
'<http.client.HTTPResponse object at 0xe58e2d0>'
ipdb> type(u)
<class 'http.client.HTTPResponse'>
ipdb> u.url                      
*** Oldest frame
ipdb> u.url()         # <-- unable to run url() on object...?
*** Oldest frame
ipdb> 
ipdb>url
'http://www.uniprot.org/uniprot/?query=mnemonic%3aSPATL_MOUSE+活动%3是&格式=选项卡&列=条目%20name'
ipdb>u
***最古老的框架
ipdb>str(u)
''
ipdb>类型(u)
ipdb>u.url
***最古老的框架
ipdb>u.url()

***最旧的帧是什么意思,如何将此对象转换为更有用的对象,以便在其上运行适当的函数?

u
是用于遍历堆栈帧的PDB命令。您已处于“最上方”帧中<代码>帮助u
将告诉您更多信息:

该命令与
d(own)
w(此处)
密切相关:

如果要打印变量
u
,请在其前面加一个
以使调试器不会将其解释为调试命令:

!u
!u.url
或者使用
print()

帮助pdb
输出:

调试器无法识别的命令被假定为Python 语句和在正在执行的程序的上下文中执行 调试。Python语句的前缀也可以是感叹号 点(“!”)

最旧帧
是堆栈中程序启动的帧;它是最古老的;堆栈另一端的
最新帧是Python执行代码的地方,也是当前的执行帧,如果点击
c(continue)
命令,Python将继续执行

一个带有递归函数的小演示:

>>> def foo():
...     foo()
... 
>>> import pdb
>>> pdb.run('foo()')
> <string>(1)<module>()
(Pdb) s
--Call--
> <stdin>(1)foo()
(Pdb) s
> <stdin>(2)foo()
(Pdb) s
--Call--
> <stdin>(1)foo()
(Pdb) s
> <stdin>(2)foo()
(Pdb) s
--Call--
> <stdin>(1)foo()
(Pdb) w
  /Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
  <string>(1)<module>()
  <stdin>(2)foo()
  <stdin>(2)foo()
> <stdin>(1)foo()
(Pdb) u
> <stdin>(2)foo()
(Pdb) u
> <stdin>(2)foo()
(Pdb) u
> <string>(1)<module>()
(Pdb) u
> /Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
(Pdb) u
*** Oldest frame
>>def foo():
...     foo()
... 
>>>导入pdb
>>>运行('foo()'))
> (1)()
(Pdb)s
--召唤--
>(1)富()
(Pdb)s
>(2)富()
(Pdb)s
--召唤--
>(1)富()
(Pdb)s
>(2)富()
(Pdb)s
--召唤--
>(1)富()
(Pdb)w
/Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/bdb.py(400)run()
->全局、局部中的exec cmd
(1)()
(2) foo()
(2) foo()
>(1)富()
(Pdb)u
>(2)富()
(Pdb)u
>(2)富()
(Pdb)u
> (1)()
(Pdb)u
>/Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/bdb.py(400)run()
->全局、局部中的exec cmd
(Pdb)u
***最古老的框架

谢谢Pieters先生,一如既往,他提供了丰富而全面的解释:)
>>> def foo():
...     foo()
... 
>>> import pdb
>>> pdb.run('foo()')
> <string>(1)<module>()
(Pdb) s
--Call--
> <stdin>(1)foo()
(Pdb) s
> <stdin>(2)foo()
(Pdb) s
--Call--
> <stdin>(1)foo()
(Pdb) s
> <stdin>(2)foo()
(Pdb) s
--Call--
> <stdin>(1)foo()
(Pdb) w
  /Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
  <string>(1)<module>()
  <stdin>(2)foo()
  <stdin>(2)foo()
> <stdin>(1)foo()
(Pdb) u
> <stdin>(2)foo()
(Pdb) u
> <stdin>(2)foo()
(Pdb) u
> <string>(1)<module>()
(Pdb) u
> /Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
(Pdb) u
*** Oldest frame