Python进阶(2)--异常处理

异常处理

在程序运行过程中,总会遇到各种各样的错误。

  1. 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误通常称之为bug,bug是必须修复的。
  2. 有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理
  3. 还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。这类错误也称为异常,在程序中通常是必须处理的,否则,程序会因为各种问题终止并退出。
  4. Python内置了一套异常处理机制,来帮助我们进行错误处理

错误类型

Python中的错误可以分为两种:语法错误和异常

其中主要的有:

主要错误.png

语法错误

代码编译时的错误,不符合Python语言规则的代码会停止编译并返回错误信息。

  1. 缺少起始符号或结尾符号(括号、引号等)
语法1.png
  1. 缩进错误
语法2.png
  1. 关键词拼写错误
语法3.png

异常错误

异常错误一共有六种典型的异常:

除零错误

除零错误(ZeroDivisionError):除数为0。

除0.png

名称错误

名称错误(NameError):变量使用前未进行申明或者初始化 。

名称.png

类型错误

类型错误(TypeError):某些函数或者方法只适用于特定的数据类型,如果 对数据类型的操作不当,就会产生类型错误 。

类型.png

数值错误

数值错误(ValueError):在输入类型正确的情况下,具体输入值错误 。

数值.png

索引错误

索引错误(IndexError):超出序列长度的索引操作。

索引.png

属性错误

属性错误(AttributeError):方法或者属性不适用该对象 。

属性.png

捕获异常

高级语言通常都内置了一套错误处理机制,Python也不例外:在Python中可通过try…except…else…finally…机制捕获异常并进行处理。

捕获.png

比如:

    li = [3, 2, 4, 1, 3, 2]
    try:
        # 里面放我觉得可能会出错的代码块
        li[6]
    except Exception as e:
        # 出错之后你怎么处理? 略过 要么就是 打印错误
        print(e)
    else:
        # 这里执行如果try的代码块没有出错才会执行
        print("try 代码块没有错误")
    finally:
        # 这里的代码放try except 不管什么样的结果它都会执行
        print("这句话必选打出来")

    print("代码继续执行")

抛出异常

Python 使用 raise 语句抛出一个指定的异常:

抛出异常.png

例如执行以下代码会触发异常:

x = 10
if x > 5:
    raise Exception('x不能大于5。x的值为:{}'.format(x))
---------------------------
输出结果:
    raise Exception('x不能大于5。x的值为:{}'.format(x))
Exception: x不能大于5。x的值为:10

raise 需要指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

自定义异常

在Python中可以通过创建一个新的异常类来拥有自己的异常。

自定义异常的原因:

  1. Python提供的内建异常不够用
  2. 可以预估某个错误的产生

异常类继承自 Exception 类,可以直接继承,或者间接继承:

class MyError(Exception):
    pass

如此便可以创建一个新的异常类。比如:

class MyError(Exception):
    pass
if __name__ == '__main__':
	li1 = [213, 43213, -312, 3412, 41, 313]
	for i in li1:
    	v = 100 / i
    	print(v)
    	if v < 0:
        	# 抛出异常
        	raise MyError("这批货有问题,做工太差")

输出结果:

    v = 100 / i
              ^
TabError: inconsistent use of tabs and spaces in indentation

总结

本篇介绍了程序的异常处理:

  1. 语法错误:

    1. 缺少起始符号或结尾符号(括号、引号等)
    2. 缩进错误
    3. 关键词拼写错误
  2. 异常错误:除零错误、名称错误、类型错误、数值错误、索引错误以及属性错误。

  3. 还介绍了如何:

    1. 捕获异常:try…except…else…工作原理

    2. 抛出异常:使用 raise 语句抛出一个指定的异常

    3. 自定义异常:异常类继承自 Exception 类,可以直接继承,或者间接继承

      class MyError(Exception):
      除零错误、名称错误、类型错误、数值错误、索引错误以及属性错误。

  4. 还介绍了如何:

    1. 捕获异常:try…except…else…工作原理

    2. 抛出异常:使用 raise 语句抛出一个指定的异常

    3. 自定义异常:异常类继承自 Exception 类,可以直接继承,或者间接继承:

      class MyError(Exception):
      pass

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值