python_day24


# ### 魔术属性

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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值