1、错误处理
在我目前的水平的情况下,如果我在Pycharm 上执行一个程序,比如说爬取某网站的数据,但是如果如果其中的部分网址是错误的,就会导致程序没有办法正确的返回html, 而这个时候,就会出现程序的错误,而会自动终止当前的程序,而这并不是我想看到的。同时,如果我遇到了一个错误,我是可以对这样的错误进行处理的,比如说,如果我没有得到正确的网址,我是可以通过从新修正这个网址的,而不是直接退出,这样是对错误的处理的一个方法。
那我经常会用的一种形式就是:
这种try:except 的结构,同时,我们不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写try...except...finally
的麻烦。
调用栈:
在一般情况下,如果错误没有捕获,那么错误就会一直向上抛,最后被解释器捕获并打印出一个错误的地址,然后退出程序
我们可以一层层进行分析 , 就会得到 起始最终的出现的错误是在return 10/int(s) 中。出错之后,我们只用分析了错误调用栈的错误才能定位错误的位置。
记录错误
实际上,我们可以将错误的记录下来并且将程序自动的执行下去。、
抛出错误
2、调试
~调试程序的几种方法:
(1)print:第一种方法,我们可以通过print 函数,将容易出现的错误的变量通过print打印出阿里,
(2)断言:凡是我们用print 打印出来的地方,我们都可以使用assert 比如 assert n!=0
(3)logging:logging 可以将错误输出到文件文件当中去
虽然看到上面这种可以正确记录错误的类型,但是我还是没有完全理解这个东西是咋用的,
https://www.cnblogs.com/CJOKER/p/8295272.html 推荐这篇博客
(4)pdb
第四种方式是启用Python的pdb , 让程序以单步的形式进行运行 下面是这种调试的方法的用法
(5)pdb.set_trace()
这个方法也是用pdb,但是不需要单步执行,我们只需要import pdb
,然后,在可能出错的地方放一个pdb.set_trace()
,就可以设置一个断点:运行代码,程序会自动在pdb.set_trace()
暂停并进入pdb调试环境,可以用命令p
查看变量,或者用命令c
继续运行:
3、单元测试
比如对函数abs()
,我们可以编写出以下几个测试用例:
-
输入正数,比如
1
、1.2
、0.99
,期待返回值与输入相同; -
输入负数,比如
-1
、-1.2
、-0.99
,期待返回值与输入相反; -
输入
0
,期待返回0
; -
输入非数值类型,比如
None
、[]
、{}
,期待抛出TypeError
。
基本上来说,我们通过编写单元测试类来对相关的代码进行测试,看是否是我们所期待试输出的东西。
5、文档测试