python_learn 异常处理及常见异常

# 1.什么是异常处理?
"""
当程序出错的时候就会抛出异常,比如IndexError\ KeyError\ NameError\ IndentationError\ AttributeError\ StopIteration\ AssertionError(测试领域)等
作用: 防止异常错误终止程序
"""
# 1.1 什么是断言语句 assert?
"""
断言就是猜一猜后面的表达式是否正确,猜对了无反应,猜错了报错
if 语句判定时选择执行或者不执行, assert 语句判定时选择报错或者不报错
"""
# 2.异常处理的基本语法
"""
1. try ... except ...
把 有问题的代码 放进try, 如果出现异常了, 直接 执行except代码块

2. try ... except + 异常错误类
把 有问题的代码 放进try, 如果出现异常了, 直接 执行except代码块, 只是由于加上了异常错误类,except执行精度更高了

3. try ... except StopIteration as e
StopIteration 是异常错误类,刚给这个类的对象起了一个别名叫e
__str__ 当在打印对象时,自动触发,自动接收return的返回值

例子:(处理迭代器的异常错误)
def mygen():
	yield1
	yield2
	return "haha"

gen = mygen()	# 初始化生成器函数 => 生成器

try:
	res = next(gen)
	res = next(gen)
	res = next(gen)
except StopIteration as e:
	print("迭代器取值错误,越界")
	print(e)

# 迭代器取值错误,越界
# haha

"""
# 2.1 异常处理的其他写法
"""
1. try ... finally ...
不论代码是否报错,都必须要执行的代码放到finally中
因为我想在程序报错的情况下,也看到相应的执行过的值

例子:
try:
	lst = [1,2,3,4]
	print(lst[100])
finally:
	print(2)
	print(3)
	print("end结束")

print(666)
print(888)

# 2
# 3
# end结束

2. try ... except ... else ... 
如果try代码块没有报错,就执行else这个分支,如果报错了,就不执行else分支
类比for/ while ... else 来记忆,遇到break后,不执行else部分

"""

# 3.主动抛异常 raise
"""
raise + 异常错误类 or 异常错误类对象

BaseException 所有异常类的父类
Exception 常规异常类的父类
"""
# 3.1 基本语法
"""
try:
	raise BaseException
except BaseException:
	print(11)

try:
	raise	# (默认接收的都是BaseException)
except:
	print(11)
"""

# 3.2 自定义异常类 MyException  (继承父类BaseException)

#(了解)系统底层获取行数和文件名的函数( 只有在程序异常时才能触发 )
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_value(n):
	try:
		raise
	except:
		return return_errorinfo(n)

class MyException(BaseException):
	def __init__(self,num,msg,line,file):
		# 错误号
		self.num = num
		# 错误信息
		self.msg = msg
		# 错误行号
		self.line = line
		# 错误文件
		self.file = file


sex = "雌雄同体"
try:
	if sex == "雌雄同体":
		# raise + 异常错误类对象 => 主动抛异常
		raise MyException(404,"人类没有雌雄同体",get_value(1),get_value(2))

# 给MyException的类对象起别名叫做e
except MyException as e:
	# 对象.属性 
	print(e.num) # 404
	print(e.msg) # 人类没有雌雄同体
	print(e.line)# 59
	print(e.file)# E:/python30/day26/3.py

Python3中,我们可以使用各种方法来处理西格玛异常值。 一种常见的方法是通过计算数据的标准差和均值来识别异常值。标准差反映数据的离散程度,当某个数据点与均值的差距超过3倍标准差时,可以将其视为异常值。可以使用NumPy库中的函数来计算标准差和均值,并使用条件语句来判断是否为异常值。 另一种方法是使用箱线图来识别异常值。箱线图可以显示数据的分布情况,包括中位数、上下四分位数和异常值。可以使用Matplotlib库中的函数绘制箱线图,并使用条件语句来判断是否为异常值。如果数据点超过上下四分位数的1.5倍距离,可以将其视为异常值。 还有一种方法是使用数据的离群值检测算法,例如LOF(Local Outlier Factor)。LOF算法使用密度和最近邻距离的概念来识别离群点。可以使用Scikit-learn库中的函数来应用LOF算法,并使用条件语句来判断是否为异常值。 处理异常值的方法可以是删除、替换或修正。如果异常值对后续分析和建模没有意义,可以选择删除异常值。如果异常值是数据收集或输入错误造成的,可以选择替换异常值为合理的值。如果异常值是由于特殊情况引起的,可以选择修正异常值,使其符合数据的分布特征。 综上所述,处理西格玛异常值的方法有很多种,具体使用哪种方法取决于数据的特点和需要处理的异常值情况。通过合适的方法处理异常值,可以提高数据的质量和分析结果的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值