廖雪峰python3复习总结——day8-1

1、try...except...finally...当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里:

https://docs.python.org/3/library/exceptions.html#exception-hierarchy

2、记录错误:Python内置的logging模块可以非常容易地记录错误信息:语法,放置except里面:

    except Exception as e:
        logging.exception(e)

3、抛出错误: raise error(“  ”)raise语句如果不带参数,就会把当前错误原样抛出。此外,在exceptraise一个Error,还可以把一种类型的错误转化成另一种类型:

try:
    10 / 0
except ZeroDivisionError:
    raise ValueError('input error!')

只要是合理的转换逻辑就可以,但是,决不应该把一个IOError转换成毫不相干的ValueError

练习:

将int()函数改为float(),int()函数是没有办法处理浮点数字符串的,可以单独处理浮点数和字符串

int(1.1)=1
int(“1”)=1
int(“1.1”)=eror

调试:

1、print()

2、assert:

assert n != 0, 'n is zero!'

assert的意思是,表达式n != 0应该是True,否则,根据程序运行的逻辑,后面的代码肯定会出错。

程序中如果到处充斥着assert,和print()相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert

$ python -O err.py

3、logging :把print()替换为logging是第3种方式:logging不会抛出错误,而且可以输出到文件

logging.info('n = %d' % n)

输出错误
import logging
logging.basicConfig(level=logging.INFO)

       它允许你指定记录信息的级别,有debuginfowarningerror等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debuginfo就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。

4、pdb:第4种方式是启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。我们先准备好程序。

以参数-m pdb启动后,pdb定位到下一步要执行的代码-> s = '0'


$ python -m pdb err.py
> /Users/michael/Github/learn-python3/samples/debug/err.py(2)<module>()
-> s = '0'

输入命令l来查看代码:

(Pdb) l

输入命令n可以单步执行代码:

(Pdb) n

任何时候都可以输入命令p 变量名来查看变量: 

(Pdb) p s

输入命令q结束调试,退出程序: 

(Pdb) q

设置断点:

这个方法也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点。

运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行。

猜你喜欢

转载自blog.csdn.net/weixin_41124748/article/details/82781188