python异常(⾼级)Exception
异常(⾼级) Exception
异常回顾:
try-except 语句 捕获(接收)异常通知,把异常流程变为正常流程
try-finally 语句 执⾏必须要执⾏的语句.
raise 语句 发送异常通知,同时进⼊异常流程
assert 语句 发送AssertionError异常
with 语句
with语句
语法:
with 表达式1 [as 变量1], 表达式2 [as 变量2], ...:
语句块
作⽤:
使⽤于对资源进⾏访问的场合,确保使⽤过程中不管是否发⽣异常都会
说明:
with语句同try-finally语句⼀样,不会改变程序的状态(异常或正常状态)
环境管理器:
类内有'__enter__' 和 '__exit__' 实例⽅法的类被称为环境管理器能够⽤with语句进⾏管理的对象必须是环境管理器 __enter__将在进⼊with语句之前被调⽤,并返回由as 变量管理的对象
__exit__ 将在离开with语句时被调⽤,且可以⽤参数来判断在离开with语句时是否有异常发⽣并做出相应的处理
异常类:
BaseExcetion 类是⼀切异常类的基类
⾃定义的异常类型必须直接或间接的继承⾃BaseExcetion类运算符重载
让⾃定义的类⽣成的对象(实例) 能够使⽤运算符进⾏操作
作⽤:
让⾃定义类的实例像内建对象⼀样进⾏运算符操作
让程序简洁易读
对⾃定义对象将运算符赋予新的运算规则
说明:
运算符已经有固定的含义,不建议改变原有运算符的含义 ⽅法名 运算符和表达式 说明 __add__(self, rhs) self + rhs 加法
__sub__(self, rhs) self - rhs 减法
__mul__(self, rhs) self * rhs 乘法
__truediv__(self, rhs) self / rhs 除法
__floordiv__(self, rhs) self // rhs 地板除法 __mod__(self, rhs) self % rhs 求余 __pow__(self, rhs) self ** rhs 幂运算 rhs (right hand side) 右⼿边
⼆元运算符的重载⽅法:
def __xxx__(self, other):
...
反向算术运算符的重载
当运算符的左侧为内建类型时,右侧为⾃定义类的对象进⾏算术运算符运算时,会出现TypeError错误,因⽆法修改内建类型的代码来实现运算符重载,此时需要反向算术运算符重载
⽅法如下:
⽅法名 运算符和表达式 说明
__radd__(self, lhs) lhs + self 加法
__rsub__(self, lhs) lhs + self 减法
__rmul__(self, lhs) lhs * self 乘法
__rtruediv__(self, lhs) lhs / self 除法
__rfloordiv__(self, lhs) lhs // self 地板除法
__rmod__(self, lhs) lhs % self 求余
__rpow__(self, lhs) lhs ** self 幂运算
lhs (left hand side) 左⼿边
复合赋值算术运算符的重载
以复合赋值算述运算符 x += y 主为例,此运算符会优先调⽤x.__iadd__(y) ,如果没有__iadd__⽅法时,会将复合赋值运算符拆解为 x = x + y然后调⽤x = x.__add__(y)⽅法,如再不存在__add__⽅法,则会触发TypeError错误
其它复合赋值运算符有相同的规则
⽅法名 运算符和表达式 说明
__iadd__(self, rhs) self += rhs 加法
__isub__(self, rhs) self -= rhs 减法
__imul__(self, rhs) self *= rhs 乘法
__itruediv__(self, rhs) self /= rhs 除法
__ifloordiv__(self, rhs) self //= rhs 地板除法
__imod__(self, rhs) self %= rhs 求余
__ipow__(self, rhs) self **= rhs 幂运算
rhs (right hand side) 右⼿边
python新手代码错了应该怎么改⽐较运算符的重载
⽅法名 运算符和表达式 说明
__lt__(self, rhs) self < rhs ⼩于
__le__(self, rhs) self <= rhs ⼩于等于 __gt__(self, rhs) self > rhs ⼤于
__ge__(self, rhs) self >= rhs ⼤于等于 __eq__(self, rhs) self == rhs 等于
__ne__(self, rhs) self != rhs 不等于注: ⽐较运算符通常返回布尔值 True 或 False
位运算符的重载
⽅法名 运算符和表达式 说明 __and__(self, rhs) self & rhs 位与 __or__(self, rhs) self | rhs 位或
__xor__(self, rhs) self ^ rhs 位异与 __lshift__(self, rhs) self << rhs 左移
__rshift__(self, rhs) self >> rhs 右移
反向位运算符的重载
⽅法名 运算符和表达式 说明 __rand__(self, lhs) lhs & self 位与
__ror__(self, lhs) lhs | self 位或
__rxor__(self, lhs) lhs ^ self 位异与 __rlshift__(self, lhs) lhs << self 左移
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论