python常识系列13-->python异常处理基础及应用

前言

   成功者之所以成功,是因为他们不浮躁、不喧闹,长年累月,脚踏实地、不动声色地努力。

一、异常处理是什么?

  • 它是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。
  • 如:文件找不到、网络连接失败、非法参数等。
  • 异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。

二、python中的异常处理

  • 在Python无法正常处理程序时就会发生一个异常,异常是Python对象,表示一个错误,当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
  • 在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,都从基类Exception继承,而且都在exceptions模块中定义。
  • Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。
  • 在python中,捕捉异常可以使用try/except语句:try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
  • 除了try/except语句,python中常用的异常关键字还有 else、finally、raise关键字。

三、try/except语句语法及运行规则

try:
   block
except [exception,[data…]]:
   block
else:
   block

异常处理语法规则:

  • 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
  • 如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
  • 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
  • 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
  • 如果没有发生异常,则执行else块代码。

四、python异常处理 try/except 实战

4.1 try/except基本实战

try:
    num_list = [1, 2, 3, 4]
    print( num_list[6] )
except IndexError as e:
    print('error:列表下标越界')
else:
    print('不报错就执行')

上述代码中,由于列表 num_list 中只包含4个值,最大下标为 3 ,但后续的代码输出 下标为 6 的值,从而引发报错,报错之后会转入 except 处理。

4.2 人为输入异常

try:
    input_index = int(input('请输入下标:
'))
    num_list = [1, 2, 3, 4]
    print( num_list[input_index] )
except IndexError as e:
    print('error:输入的列表下标越界')
else:
    print('不报错就执行')

上述代码中,把列表 num_list 的下标改成用户可输入的情况,那么输入正常,就不会触发异常,输入错误就会进行处理。

4.3 Exception异常父类使用

try:
    input_index = int(input('请输入下标:
'))
    num_list = [1, 2, 3, 4]
    value = num_list[input_index]
    print( '您输入后得到的值是:' + value )
except IndexError as e:
    print('error:输入的列表下标越界')
except Exception as e:
    print('系统异常,出错原因是%s'%e.__str__())
else:
    print('不报错就执行')

上述代码中,Exception是所有异常类的父类,也可以用来捕获异常,常用于程序可能会发生未知错误的情况。

4.4 finally的使用

try:
    input_index = int(input('请输入下标:
'))
    num_list = [1, 2, 3, 4]
    value = num_list[input_index]
    print( '您输入后得到的值是:' + value )
except IndexError as e:
    print('error:输入的列表下标越界')
else:
    print('不报错就执行')
finally:
    print('我一直执行')

上述代码中,finally代表不管是否报错都需要执行它其中代码的含义。如在代码段内打开了一个文件,但有其它报错,此时finally中写上关闭文件代码。

五、利用raise触发异常

Python中的raise 关键字用于引发一个异常,语法格式如下:

raise [Exception [, args [, traceback]]]

语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None" ,简单使用代码如下:

index_error = IndexError('列表下标越界')
raise index_error

上述代码是直接利用raise触发 IndexError 异常,无需系统等到列表访问下标越界时才报错。

六、自定义异常

  • 通过创建一个新的异常类,程序可以命名它们自己的异常。
  • 异常应该是典型的继承自Exception类,通过直接或间接的方式。
  • 自定义异常使用raise语句引发,而且只能通过人工方式触发。
#    创建一个自定义异常AgeOutOfRangeError
class AgeOutOfRangeError(Exception):
    def __init__(self,age):
        self.age = age
    def __str__(self):
        return '年龄输入%d,超出范围值【0-150】错误'%self.age

# 使用自定义异常AgeOutOfRangeError
try:
    num = int(input('请输入年龄:
'))
    if num<0 or num>150:
        raise AgeOutOfRangeError(num)
except AgeOutOfRangeError as e:
    print( e.__str__() )
except Exception as e:
    print( e.__str__() )

七、小结

  • 异常处理用来处理程序中会遇到的可能的异常情况,一般异常常来自于用户误操作
  • 触发系统自带的可以称呼为系统异常处理,触发自定义异常,可以称呼为业务异常处理
原文地址:https://www.cnblogs.com/dream66/p/12927497.html