我正在尝试向服务器发出http请求并检查我收到的内容。但是,当我尝试用HTTPResponse object
ipdb
时,我不断得到*** Oldest frame
,我无法运行我应该能够运行的对象上的任何函数。以下是用于获取的代码块和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输出:
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>
*** Oldest frame
意味着什么,以及如何让这个对象更有用,我可以运行相应的函数?
答案 0 :(得分:10)
u
是遍历堆栈帧的PDB命令。你已经处于“最上层”的框架中。 help u
会告诉您更多相关信息:
u(p) Move the current frame one level up in the stack trace (to an older frame).
该命令与d(own)
和w(here)
:
d(own) Move the current frame one level down in the stack trace (to a newer frame). w(here) Print a stack trace, with the most recent frame at the bottom. An arrow indicates the "current frame", which determines the context of most commands. 'bt' is an alias for this command.
如果要打印变量u
,请在其前面添加!
,以使调试器不将其解释为调试命令:
!u
!u.url
或使用print()
:
print(u)
来自help pdb
输出:
调试器无法识别的命令被假定为Python 语句并在程序的上下文中执行 调试。 Python语句也可以使用感叹号作为前缀 点('!')。
Oldest frame
是程序启动时堆栈中的框架;它是最古老的; Newest frame
是堆栈的另一端,是Python执行代码的地方,也是当前的执行框架,如果你点击c(ontinue)
命令,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