调试

在需要调试的代码位置,加入如下代码,即可进入PDB交互式源代码调试模式。详细用法参考官方文档:pdb — Python 的调试器

1
import pdb;pdb.set_trace()
命令 解释
break 或 b 设置断点 设置断点
continue 或 c 继续执行程序
list 或 l 查看当前行的代码段
step 或 s 进入函数
return 或 r 执行代码直到从当前函数返回
exit 或 q 中止并退出
next 或 n 执行下一行
pp 打印变量的值
help 帮助

常见问题

python修改sys.path的三种方法

sys.path是一个列表,存放的是python搜索模块时可以搜索的路径,启动python脚本时,会将执行当前命令所在的目录添加到这个列表中,而且是在列表的最前面,正是因为这个操作,你才能在自己的项目里引用自己编写的模块,当模块名称与第三方模块或系统模块冲突时,优先引用项目里的模块。通常,sys.path里的内容如下所示:

1
2
3
>>> import sys
>>> sys.path
['', '/root/.pyenv/versions/3.6.5/lib/python36.zip', '/root/.pyenv/versions/3.6.5/lib/python3.6', '/root/.pyenv/versions/3.6.5/lib/python3.6/lib-dynload', '/root/.pyenv/versions/3.6.5/lib/python3.6/site-packages']

这里,你重点关注site-packages, 我们安装的第三方库和模块都放在了这里。将sys.path设计为一个可变的列表,而不是元组,就是考虑到了开发人员有很强的动机和需要去修改模块的搜索路径和顺序。

方法1,直接修改sys.path列表

设想,如果你的系统允许用户提交自定义的python脚本,那么你可以为此专门创建一个目录用于存放这些脚本,并将这个目录加入到sys.path中,这样,在你的系统里,你可以像引用其他模块一样去引用用户上传的python脚本来执行他们,这就是本文所提到的修改sys.path的三种方法中的一个,你只需要使用sys.path.append方法将目录添加即可。

方法2, 创建.pth文件

另一种修改sys.path的方法时在site-packages目录新建一个.pth文件,并在文件中加入搜索模块的路径

1
/root/test

重新启动一个python交互式解释器,输出sys.path,你可以看到/root/test目录也在其中。

方法3,设置PYTHONPATH环境变量

第三种修改方法,通过PYTHONPATH环境变量,我使用export 命令设置该环境变量

1
2
3
[root@sheng studyflask]# export PYTHONPATH=/root/studyflask
[root@sheng studyflask]# echo $PYTHONPATH
/root/studyflask

这种设置方法仅仅是为了验证是否凑效,退出终端后,环境变量就会失效,如果你想永久生效,可以在/etc/profile,或者.bashrc中进行设置,设置完PYTHONPATH后,启动一个新的python交互式解释器,输出sys.path

1
2
3
>>> import sys
>>> sys.path
['', '/root/studyflask', '/root/.pyenv/versions/3.6.5/lib/python36.zip', '/root/.pyenv/versions/3.6.5/lib/python3.6', '/root/.pyenv/versions/3.6.5/lib/python3.6/lib-dynload', '/root/.pyenv/versions/3.6.5/lib/python3.6/site-packages']