66 异常处理

"""
1、什么是异常
	异常说错误发生的信号,一旦程序出错就会产生一个异常
	如果该异常没有被处理,该异常就会被跑出来,程序的运行随即终止

	异常由三部分组成:
		1、具体哪一行代码抛出的异常
		2、异常的种类
			NameError:变量名为定义
			IndexError:索引不存在
			KeyError:key不存在
			AttributeError:对象属性不存在
			ValueError:值错误
			TypeError:错误
		3、异常的内容信息

2、为何要处理异常
	为了增强程序的健壮性

3、如何处理异常
	1、针对语法的错误:应该在程序运行前立即改正
	2、针对逻辑错误:
		2.1 如果逻辑错误发生的条件是可以预知的,应该if判断解决
		2.2 如果逻辑错误发生的条件是不可预知的,那么异常一定会发生,考虑到程序的健壮性
			我们应该处理异常,做好补救措施
	
			try:
				代码块
			except 异常的类型:
				发生异常后要执行的代码

"""
# 1 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。
s1 = 'hello'
try:
	int(s1)
except IndexError as e:  # 未捕获到异常,程序直接报错
	print(e)

# 2 多分支
s1 = 'hello'
try:
	int(s1)
except (IndexError, KeyError) as e:
	print(e, '1')
except ValueError as e:
	print(e, '3')

# 3 万能异常Exception
s1 = 'hello'
try:
	int(s1)
except Exception as e:
	print(e, '4')

# 4 多分支异常与万能异常
# 4.1 如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么骚年,大胆的去做吧,只有一个Exception就足够了。
# 4.2 如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。

# 5 也可以在多分支后来一个Exception
s1 = 'hello'
try:
	int(s1)
except IndexError as e:
	print(e)
except KeyError as e:
	print(e)
except ValueError as e:
	print(e, '5')
except Exception as e:
	print(e, '6')

# 6 异常的其他机构
s1 = 'hello'
try:
	int(s1)
except IndexError as e:
	print(e)
except KeyError as e:
	print(e)
except ValueError as e:
	print(e)
# except Exception as e:
#    print(e)
else:
	print('try内代码块没有异常则执行我')
finally:
	print('无论异常与否,都会执行该模块,通常是进行清理工作')

# 7 主动触发异常
try:
	raise TypeError('类型错误')
except Exception as e:
	print(e)


# 8 自定义异常
class EgonException(BaseException):
	def __init__(self, msg):
		self.msg = msg

	def __str__(self):
		return self.msg


try:
	raise EgonException('类型错误')
except EgonException as e:
	print(e)

# 9 断言:assert 条件
assert 1 == 1
# assert 1 == 2

# 10 总结try..except

# 1:把错误处理和真正的工作分开来
# 2:代码更易组织,更清晰,复杂的工作任务更容易实现;
# 3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值