python ----异常处理

1、异常

  • 广义上的错误分为错误和异常
  • 错误指的是可以人为避免
  • 异常指的是在语法逻辑正确的前提下,出现的问题
  • 在python中,异常是一个类,可以处理和使用

2、异常处理

  • 不能保证程序永远正确运行
  • 但是,必须保证程序在最坏的情况下得到的问题被妥善处理
  • python的异常处理模块全部语法为:
    try:
    尝试实现某个操作
    如果没有出现异常,任务就可以完成
    如果出现异常,将异常从当前代码块扔出去尝试解决异常
    except 异常类型1:
    解决方案1:用于尝试在此处理异常解决问题
    except 异常类型2:
    解决方案2:用于尝试在此处理异常解决问题
    except(异常类型1,异常类型2…):
    解决方案:针对多个异常使用相同的处理方式
    except:
    解决方案:所有异常的解决方案
    else:
    如果没有出现任何异常,将会执行此处代码
    finally:
    不管有没有异常都要执行的代码
  • 流程
    • 1、执行try下面的语句
    • 2、如果出现异常,则在except语句中查找对应异常并进行处理
    • 3、如果没有出现异常,则执行else语句内容
    • 4、最后,不管是否出现异常,都要执行finally语句
  • 除except(最少一个)以外,else和finally是可以选的
  • 简单异常案例 一
try:    
	num = int(input('please input your number:'))    
	result = 100/num    
	print('计算结果:{0}'.format(result))
except:    
	print('输入错误')    
	exit()
print('*'*20)
  • 简单异常案例 一
try:    
	num = int(input('please input your number:'))    
	result = 100/num    
	print('计算结果:{0}'.format(result))    
	#捕获异常后,把异常实例化,出错信息会在实例中    
	#注意一下写法    
	#以下语句是在捕获ZeroDivisionError异常并在实例化实例e
except ZeroDivisionError as e:    
	print('输入错误')    p
	rint(e)    
	exit()
  • 简单异常案例 一
try:    
	num = int(input('please input your number:'))    
	result = 100/num    
	print('计算结果:{0}'.format(result))    
except ZeroDivisionError as e:    
	print('输入错误')    
	print(e)    
	exit()
except NameError as e:    
	print('名字取错了')    
	print(e)    
	exit()
except ArithmeticError as e:    
	print('属性问题')    
	print(e)    
	exit()	
#任何异常都是继承自Exception
#如果写上这句话,任何异常都会被拦截,而且一定是写在最后一个
except Exception as e:    
	print('不知道哪错了')    
	print(e)    
	exit()
#越具体的异常越要往前放#在异常类继承关系中,越是子类的异常,越要往前放
#在处理异常的时候,一旦拦截到某一个异常,则不再继续往下看,直接#执行下一个代码,如果有finally则执行

3、用户手动引发异常

  • 当某些情况下,用户希望自己引发一个异常的时候
  • 可以使用raise 关键字来引发异常
try:    
	print('I love Chengcheng')    
	print(3.14555)    
#手动引发一个异常    
#注意语法:raise ErrorClassName    
	raise ValueError    
	print('还有')
except NameError as e:    
	print("NameError")
except ValueError as e:    
	print('ValueError')
except Exception as e:    
	print('Exception')
finally:    
	print('我是一定被执行的')
  • 自己定义异常
#注意:自定义异常必须是系统异常类的自类
class YsError(ValueError):    
	pass
try:    
	print('I love Chengcheng')    
	print(3.14555)    
	#手动引发一个异常    
	#注意语法:raise ErrorClassName    
	raise YsError    
	print('还有')
except NameError as e:    
	print("NameError")
#如果没有下面语句,异常将会被ValueError拦截
except YsError as e:    
	print('Yserror')
except ValueError as e:    
	print('ValueError')
except Exception as e:    
	print('Exception')
finally:    
	print('我是一定被执行的')
  • 关于自定义异常
  • 只要是raise异常,则推荐自定义异常
  • 在自定义异常中,一般包含以下代码
    • 1、自定义发生异常的异常代码
    • 2、自定义发生异常的问题提示
    • 3、已定义发生异常的行数
  • 最终目的,一旦发生问题,方便快速定位错误现场

4、else语句案例

try:    
	num = int(input('please input your number:'))    
	result = 100/num    
	print('计算结果:{0}'.format(result))
except Exception as e:    
	print('Exception')
else:    
	print('No Exception')
finally:    
	print('我会被执行')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值