1.异常捕获
程序出现异常会直接崩溃,不能往后执行。异常捕获就是为了让程序出现异常的时候不崩溃,自己处理异常
语法1
try:
代码块1
except:
代码块2
执行过程:先执行代码块1,在执行代码块1的过程中 如果出现异常程序不崩溃,直接执行代码块2 如果没有出现异常 不执行代码块2 直接执行其他语句
语法2:
try:
代码块1
except 错误类型:
代码块2
# 打开文件,如果文件不存在,创建这个文件
try:
with open('aaa.txt',encoding='utf-8')as f:
f.read()
except FileNotFoundError:
print('没有这个文件')
# open('aaa.txt','w')
try:
代码块1
except (异常1,异常2,····):
代码块2
只要是异常中的任何一种 就捕获 不会报错
如果不在里面,报错
所有的异常都执行同一语句(代码块2)
try:
代码块1
except 异常2:
代码块2
except 异常3:
代码块3
根据不同的异常执行不同的语句(代码块)
# 上面的四种结构最后都可以加finally;
# 不管try里面代码是否异常,是否捕获到
# finally后面的代码都会执行
# 一般可以在这个地方做一些数据的保存和备份
try:
print(int('abc'))
except ValueError:
print('值错误')
finally:
print('r')
3.抛出异常
让程序主动崩溃
raise 异常类型
注意:异常类型可以是系统自带的,也可以是程序员自定义的 (要求异常类型必须是exception的子类)
print('abc')
raise KeyError
1.类中的方法
声明在类中的函数就是类的方法
对象方法,类的方法,静态方法
2.对象方法
直接声明在类中的函数就是对象方法,默认参数self
对象方法中默认参数self,在通过对象调用的时候,这个
参数不用传参,系统会自动将当前对象传递给self
哪个对象调用当前方法,self就是谁
self 本质就是当前类的对象,对象能做的self都能做
1.init方法
python中以开头结尾的方法称为魔法方法,系统会在需要的情况下(创建对象的时候)会自动调用
创建对象的时候,系统自动调用init方法,对对象进行初始化操作
2.构造方法
函数名和类名一样的方法就是构造方法。
声明类的时候,系统自动创建和类名相同的函数
这个函数是:
def 类名(args,kwargs):
对象=创建对象
对象.init(args,**kwargs)
return 对象
所以创建对象的时候 对象=类名() 相当于调用函数
()里是否有参数,取决于类里的init方法是否有
除了self以外的形参
class Person:
def __init__(self,name='',age=0):
self.name=name
self.age=age
self.tel=123456
def sleep(self):
print(self.name+'在睡觉')
p1=Person('zhang')
p1.sleep()
1.属性:类的字段,对象属性
类的字段
直接声明在类中的变量就是类的字段
怎么使用 - 通过类.方式使用
什么时候用 - 属性的值不会因为对象不同而不同
就是用类的字段
2.对象属性
在__init__方法下通过self.属性=值来声明
怎么使用 - 通过对象.使用
什么时候用 - 属性的值会因为对象不同而不同
对象属性的查
对象.属性 没有属性会报错
getattr(对象,'属性名',值) 查找对象的属性 没有会返回默认值
对象属性的增
对象.属性=值 原来有会修改 没有会增加
setattr(对象,'属性名',值) 原来有会修改 没有会增加
对象属性的删
del 对象.属性
delattr(对象,'属性名') 没有会报错
1.name
类.name 获取类的名字以字符串返回
2.doc
类.doc 获取类的说明文档
3.class
对象.class 获取当前对象的类
print([1,2].class) 相对于type
4.dict
对象.dict 把当前对象的属性和值作为键值对以字典返回
类.dict 把当前类所有的字段和对应的值以字典方式返回
5.bases
类.bases 获取当前类所继承的父类,以元组方式返回
6.module
类.module 获取当前类所在模块的名字 返回字符串