Python 什么是';***最古老的框架';在ipdb中是什么意思?
我试图向服务器发出http请求,并检查返回的内容。但是,当我尝试用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
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