# ### 魔术属性
class Man():
pass
class Woman():
pass
class Sasuke(Man,Woman):
"""
描述: 佐助
成员属性: __eye skin
成员方法: skylight __moonread
"""
__eye = "写轮眼"
skin = "白色"
def skylight(self , myfunc):
print("天照")
print(myfunc.__name__)
def __moonread(self):
print("月读")
obj = Sasuke()
# __dict__ 获取对象或类的内部成员结构
dic = Sasuke.__dict__
dic = obj.__dict__
print(dic)
# __doc__ 获取对象或类的内部文档
print(Sasuke.__doc__)
print(obj.__doc__)
# __name__ 获取类名函数名
def func():
print("佩恩")
obj.skylight(func)
# __class__ 获取当前对象所属的类
print(obj.__class__)
# __bases__ 获取一个类直接继承的所有父类,返回元组
print(Sasuke.__bases__)
# ### 异常处理
# IndexError 索引超出序列的范围
# KeyError 字典中查找一个不存在的关键字
# NameError 尝试访问一个不存在的变量
# IndentationError 缩进错误
# AttributeError 尝试访问未知的对象属性
# StopIteration 迭代器没有更多的值
# AssertionError 断言语句(assert)失败
"""assert猜的意思 , 叫断言,
如果是正确的没有任何反应,代码正常执行
如果是错误的直接报错,终止程序
"""
# ### 异常处理的语法
"""
try .. except .. 来抑制错误
把又可能报错的代码放到try这个代码块当中,
如果有报错,直接执行except这个代码块
如果没有报错,不执行except这个代码块
在异常处理当中,所有的异常错误类都继承 BaseException Exception 普通异常的父类(了解)
# 类型上的子父关系
from collections import Iterator,Iterable
print(issubclass(Iterator, Iterable))
"""
# 1.基本语法
try:
lst = [1,2,3]
lst[1000]
except:
pass
try:
lst = [1,2,3]
lst[1000]
except BaseException:
pass
# 2.带有分支的异常处理
try:
lst = [1,2,3]
lst[1000]
except IndexError:
print("下标越界")
# 3.处理生成器的异常报错
def mygen():
yield 1
yield 2
yield 3
return [1,2,3]
try:
gen = mygen()
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
# 给StopIteration这个类创建出来的对象起一个别名叫e
"""
当你打印对象时,会触发内部__str__方法,通过一些列的调用,返回出最后的返回值
"""
except StopIteration as e:
# 可以获取返回值
print(e)
# 4.异常处理的其他写法
"""
1 .try .. except .. else ..
当try这个代码块当中没有报错的时候,执行else这个分支
如果try代码块有报错,就不执行else这个分支
"""
try:
print(123)
except:
pass
else:
print("else")
"""
2.try .. finally ... 无论代码是否报错,都必须要执行的代码写在finally这个代码块当中
场景:应用在异常环境下,保存数据或者关闭数据库等操作,必须要在数据库程序崩溃之前执行的代码写在finally代码块中;
"""
"""3.try .. except .. else .. finally .. """
try:
lst = [1,2,3]
lst[1000]
# print(123)
except:
print(456)
else:
print("执行了else分支 ... ")
finally:
print("执行关闭数据库操作")
# ### 主动抛异常
"""
BaseException 所有异常类的父类
Exception 普通异常类的父类
raise + 异常错误类 / 异常错误类对象
"""
# (1) raise 基本语法
# raise KeyError
# raise KeyError()
"""
try:
raise
except:
pass
"""
# (2) 自定义异常错误类
"""必须继承异常类的父类 BaseException """
# return_errorinfo必须在报错的情况下才能触发内部相应方法获取当前行号和文件名
def return_errorinfo(n):
import sys
f = sys.exc_info()[2].tb_frame.f_back
if n == 1:
return str(f.f_lineno) #返回当前行数
elif n == 2:
return f.f_code.co_filename #返回文件名
# 通过主动抛出异常,来获取响应的数据
def get_info(n):
try:
raise
except:
return return_errorinfo(n)
# 自定义异常错误类
class MyException(BaseException):
def __init__(self,error_num,error_msg,error_filename,error_linenum):
self.error_num = error_num
self.error_msg = error_msg
self.error_filename = error_filename
self.error_linenum = error_linenum
eye = "轮回眼"
try:
if eye == "轮回眼":
raise MyException( 404,"人类没有轮回眼",get_info(2) , get_info(1) )
except MyException as e: #给自定义MyException异常类的对象起个别名叫做e
print(e.error_num)
print(e.error_msg)
print(e.error_filename)
print(e.error_linenum)
python_day24
最新推荐文章于 2024-04-10 09:05:59 发布