python编程基础之三十五
系统的魔术方法:系统的魔术方法特别多,但是也都特别容易懂,简单的讲就是对系统的内置函数进行重写,你需要什么效果就重写成什么样,
比如说len()方法针对的对象本来没有自定义类的对象,但是当你重写了__len()__这个魔术方法时候,就可以对你需要的进行计算了,这个需要积累
这里给个例子吧
1 class Dog: 2 def __init__(self, l): 3 self.l = [] 4 self.l.extend(l) 5 def __len__(self): 6 return len(self.l) 7 8 9 l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] 10 d1 = Dog(l1) 11 print(len(d1))
异常处理:try - except语句
1 try: 2 【代码块A】 #可能会出错误的代码 异常检测 3 except Exception1[ as e]: #异常处理 4 【代码块1】 #异常处理代码 5 except Exception2[ as e]: #异常处理 6 【代码块2】 #异常处理代码 7 .... 8 except Exceptionn[ as e]: #异常处理 9 【代码块n】 #异常处理代码 10 [else:] #可选,如果没有引发异常会执行 11 处理语句 12 [finally:] #无论如何都要执行的语句 13 处理语句 14 【后续语句】
-
-
except语句书写要求:精确的类型往前放,模糊的,不精确的往后放
-
except不带任何类型,则匹配所有类型异常,应该放到最后,吞掉异常
-
可以将多种异常用元组的方式(异常类型1,异常类型2...异常类型n)书写,简化代码
-
except字句中e,是一个对象,打印它,会显示异常信息描述
-
try-except也可以捕获方法或函数中抛出的异常
-
所有异常类型都继承自BaseException,使用BaseException可以将异常一网打尽
-
finally字句中可以进行一些清理工作,比如关闭文件,数据库等工作
抛出异常:手动抛出一个异常,无论哪种异常都可以带一个参数字符串,如果没有带参数,则会把异常原样抛出
1 try: 2 raise ZeroDivisionError('除0错误') 3 # raise ZeroDivisionError #如果不想获取错误信息,可以不带参数 4 except ZeroDivisionError as e: 5 print(e) #除0错误
assert 断言:
执行流程:如果条件为假,则抛出AssertionError,条件为真,就当assert不存在
作用:对于可能出问题的代码,加上断言,方便问题排查
1 print('start') 2 num = int(input('请输入一个1~9的整数:')) 3 assert 0 <num <9,'num不在1~9' 4 print('end')
自定义异常:如果说系统异常类型已经无法满足自己,那么就可以写个自定义异常
-
-
步骤:
-
在自定义异常类的构造函数中,调用父类构造函数
-
重写
__str__
方法输出异常信息 -
编写异常处理方法处理异常
-
1 class CustomError(BaseException): #继承BaseException 2 def __init__(self,msg): 3 super().__init__() #调用父类初始化 4 self.msg = msg 5 6 #重写__str__,输出异常信息 7 def __str__(self): 8 return self.msg 9 10 #3.自定义异常处理方法 11 def handle_exception(self): 12 print('异常处理') 13 14 try: 15 raise CustomError('自定义异常') 16 except CustomError as e: 17 print(e)