异常处理
当代码运行出错时,程序会终止。code就不是0了,而是-1或者1,不是正常结束。
程序碰到异常又没有捕获到,没有做相应的处理,程序会崩溃。
如果不做异常处理,执行到一些容易出错的位置,可能代码出错会导致程序崩溃,控制台打印异常信息
如果做了异常处理,只是有异常的代码不执行,对异常处理以外的代码不影响
可以在except后面添加异常类型,如果是某种类型的错误,就打印对应的输出信息
可以在后面添加else,如果这段代码没有出错,就执行else后面的代码
有一些代码是不管代码是否运行出错都要执行的,比如打开一个文件,不管这个文件是否找到,都需要关闭文件。
这样的代码需要写在finally里
常见异常总结
SynataxError: 语法错误NameError: 试图访问的变量名不存在IndexError: 索引错误,使用的所以你不存在,常为索引超出序列范围KeyError: 使用了映射中不存在的关键字(键)时引发的关键字错误TypeError: 类型错误,内建操作或是函数应于在错误类型的对象时会引发类型错误ValueError: 值错误,传给对象的参数类型不正确,例如给int()函数传入了字符串数据类型AttributeError: 属性错误,特性引用和赋值失败时会引发属性错误IOError: 输入输出错误
异常不局限于以上八中,这只是很常见的八种异常
异常的传递
try嵌套,目的是防备,调用其他程序出错.
我打开这个文件后想要按行读取,文件找到了但是格式不对,读取失败
如果读取文件的时候已经做了异常处理,那么我读取文件的时候就会提示报错信息,而外层的异常处理就不会报错,后面程序是可以继续执行的。
如果我读取的时候没有做异常处理,那么外层的except会打印报错信息,后面的程序还是正常运行的
这种主要是为了防止调用其他程序时,如果其他的程序中有异常但是没有做异常处理,那么我调用的时候如果不做异常处理就会直接程序崩溃。所以我不管其他程序有没有异常处理,我都要进行异常处理,就算真的发生异常,也不会影响后面的代码。
函数嵌套调用中
我定义一个发生错误的函数test1,在另一个函数test2中调用这个错误的函数test1,然后运行test2。我如果在test2中没做任何处理直接调用,那一定会报错,后面代码无法执行
我在test3中同样调用test1这个错误的函数,但是我在test3中做了异常处理。这时调用test3就会直接打印出报错信息,并且不会对后面的代码产生影响
面向对象
把一系列相关的 变量 和 函数,写在一起,进行 封装 就是类.
变量是属性
函数是方法
面向对象的三大特征:封装,继承,多态
类和对象举例
水果 – 类
苹果 – 类
红苹果 – 类
红富士苹果 --类
我桌上唯一的那个苹果 --对象
造飞机
图纸 --类
做出来的每一架飞机 --对象
狗 --类
黄狗 --类
我家的那只黄狗 --对象
类实例化之后,生成对象
类的语法
关键字 class
类的名字(必须有,大驼峰命名法)
属性(可以有,下划线命名法)
方法(可以有,下划线命名法)
实例化对象