python之异常处理

   1. 错误类型

IndexError:list index out of range #下标越界
 ZeroDivisionError:division by zero #分母为0
 TypeError: can only concatenate str (not "int") to str #类别错误(即不同的类型进行加减之类的操作)
 AttributeError:'list' object has no attribute 'find' #用做字符串的函数用在列表中
 FileNotFoundError: [Errno 2] No such file or directory: 'd:\\\\pythoncode\\hello.py' #文件处理相关的错误
 KeyError: 'nam' #键查找的错误

这些错误的名称最好有一定了解,方便我们对一些异常的指定查找有一定的帮助

  1. 异常处理结构

  • try和except

try是对异常信息的检测,而except则是对异常信息的捕获并处理

  • 对于一般的异常信息可以

 try:
     AAA
 except:
     XXX
  • 对于指定想要报错的信息时可以把异常类型放expect后面

try:
     XXX
 except ___Error: #这里填的是异常类型
     XXX
  • 如果是针对多个指定的错误的信息时,并输出一个结果时可以把多个类型用()括起来,让他们构成元组

 try:
     XXX
 except (IndexError,ZeroDivisionError):
     XXX

这样只要是这两个异常语句的其中之一时,都会执行expect下面的语句

  • 当然,可以多个expect放在一起并用,那样就类似于多个if条件句

     try:
         XXX
     except IndexError:
         XXX
     except ZeroDivisionError:
         AAA

这样当异常为IndexError时,会执行下面的XXX,而当异常为ZeroDivisionError时,会执行下面的AAA

  • 当你想要了解你的异常信息时可以

try:
     XXX
 except as e:
     print(e)
     XXX

这样就会把异常类型对应的信息传递给e

  • 也可以用else针对try的语句没有报错时执行一些信息(这里的except就类似于if,当出现对应的异常时except执行,否则是else执行)

 try:
     AAA
 except:
     XXX
 else:
     BBB
  • 当然还有一个finally针对于无论是否报错都会执行(个人感觉其实有没有问题不大,毕竟反正都会执行)

try:
     AAA
 except:
     XXX
 else:
     BBB
 finally:
     CCC
  • 当然对于多个try在一起时,如果里面的异常except没有检测出来,会返回给它的上一层,,如下所示

     try:
         try:
             try:
                 a=input()
                 a=int(a)
             except ZeroDivisionError:
                 print('最里层')
                 # print(1/0)
         except:
             print('中间一层')
     except:
         print('最外层')

这里的ZeroDivisionError是指分母为0,而当我们输出非数字时a=int(a)会抛出异常,毕竟非数字类型不能用int,此时的错误类型为ValueError,因此最里层的except检测不出来,然后把它传递给中间一层,因此输出结果为中间一层,当然如果最里层的except对应的也有异常,那么它还是会传递给中间一层

  • 当然,如果你想人为抛出异常,可以用raise,一般raise有三种用法

  1. 只含raise

    >>> raise
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     RuntimeError: No active exception to reraise

这种直接抛出RuntimeError异常,并返回对应异常信息

  1. raise+你指定的一个异常类型

     >>> raise ValueError
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ValueError

这样只会抛出一个ValueError名为ValueError,但并没有对应的异常信息

  1. raise+你指定的一个异常类型+异常信息

>>> raise ValueError("输出错误")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 ValueError: 输出错误

这样会附带异常信息

  • raise一般和try等一起连用,比如当你想要你输入的数小于100,否则会抛出"你输入的数必须得小于100"(这里只考虑输入的为数)

try:
    a=int(input())
    if(a>=100):
        raise ValueError('你输入的数必须小于100')
except ValueError as e:
    print(e)
else:
    print(a)

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值