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语句书写要求:精确的类型往前放,模糊的,不精确的往后放

  • 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 断言:

asser 条件 [,异常描述字符串]

  执行流程:如果条件为假,则抛出AssertionError,条件为真,就当assert不存在

​  作用:对于可能出问题的代码,加上断言,方便问题排查

1 print('start')
2 num = int(input('请输入一个1~9的整数:'))
3 assert 0 <num <9,'num不在1~9'
4 print('end')
assert断言

自定义异常:如果说系统异常类型已经无法满足自己,那么就可以写个自定义异常

  • 自己定义的异常类必须继承BaseException或Exception

  • 步骤:

    • 在自定义异常类的构造函数中,调用父类构造函数

    • 重写__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)
自定义异常

 

posted @ 2018-08-11 11:58  嗨哥-higer  阅读(95)  评论(0编辑  收藏  举报