debugging 如何在Python自己的调试器(PDB)中执行多行语句

13z8s7eq  于 2023-10-24  发布在  Python
关注(0)|答案(7)|浏览(236)

所以我运行一个Python脚本,在其中我通过编写调用Python的调试器PDB:

import ipdb; ipdb.set_trace()

(iPython的PDB版本,尽管我认为它没有什么区别;我只在彩色输出中使用它)。
现在,当我进入调试器时,我想执行一个多行语句,如if子句或for循环,但只要我键入

if condition:

然后按回车键,我得到错误消息*** SyntaxError: invalid syntax (<stdin>, line 1)
如何在PDB中执行多行语句?如果不可能,有没有办法仍然执行if子句或for循环?

093gszye

093gszye1#

您可以在PDB中执行此操作,以使用所有可用的局部变量启动临时交互式Python会话:

(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

完成后,使用Ctrl-D返回到常规的pdb提示符。
只是不要按Ctrl-C,这将终止整个PDB会话。

9cbw7uwe

9cbw7uwe2#

在python3中,ipdb(和pdb)有一个名为interact的命令。它可以用来:
启动一个交互式解释器(使用代码模块),其全局名称空间包含在当前作用域中找到的所有(全局和局部)名称。
要使用它,只需在PDB提示符下输入interact。除此之外,它对于应用跨多行的代码很有用,也可以避免意外触发其他PDB命令。

k5ifujac

k5ifujac3#

我的建议是使用IPython嵌入。

ipdb> from IPython import embed; embed()
de90aj5v

de90aj5v4#

在Python(2.7.1)解释器或调试器(import pdb)中,可以使用以下语法执行多行语句。

for i in range(5): print("Hello"); print("World"); print(i)

注意事项:当我在解释器中时,我必须在代码执行之前按两次回车键,然而在调试器中,我只需要按一次回车键。

zf9nrax1

zf9nrax15#

如果你想在遇到断点时执行几个命令,这是一种特殊情况。然后是调试器命令commands。它允许你输入多行命令,然后用end关键字结束整个序列。更多的是(pdb) help commands

balp4ylt

balp4ylt6#

我不知道你是否能做到这一点,但这将是ipdb的一个很好的功能。当然,你可以使用列表解析,并执行简单的多行表达式,如:

if y == 3: print y; print y; print y;

你也可以预先编写一些函数来完成你需要完成的事情,这些事情通常需要多行代码。

lh80um4z

lh80um4z7#

这将为所有列和所有行的数组框架做这件事。
我认为这是最好的SQL

for i in df.columns:
  for i in df.columns:  df[i] =  df[i].astype("string")

这是使用JSON的另一种方式,但将项目转换为字符串

for i in df.columns:
  df[i] = [json.dumps(x) for x in df[i]]

现在我可以写我的sqlite3数据库没有错误。这里的一些代码假设你有框架df。

import pandas
import sqlite3

for i in df.columns:
  for i in df.columns:  df[i] =  df[i].astype("string")

cnx = sqlite3.connect(f"db.sqlite3")
df.to_sql(name='table1', con=cnx, index=False)

相关问题