Python学习笔记|Python基础教程(异常处理)


文章目录

  • 前言
  • 一、异常处理机制
  • 二、异常处理基本结构
    • 1.基本结构
    • 2.常见异常类
    • 3.捕捉多个异常
    • 4.try…finally终止行为
    • 5.主动引发异常
    • 6.自定义异常类
  • 总结
【Python学习笔记|Python基础教程(异常处理)】
前言 ??异常处理是Python的一种高级工具,当异常发生时,程序会停止当前的所有工作,跳转到异常处理部分去执行。异常既可以是程序错误引发的,也可以是由代码主动触发 一、异常处理机制 ??Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。 二、异常处理基本结构 1.基本结构 代码如下:
try: 可能引发异常的代码 except 异常类型名称: 异常处理代码 else: 没有发生异常时执行的代码

??在处理异常时,将可能引发异常的代码放在try语句块中。在except语句中指明捕捉处理的异常类型名称,except语句块中为发生指定异常时执行的代码。else语句块中为没有发生异常时执行的代码,else部分可以省略。 2.常见异常类
  1. AttributeError:访问对象属性时引发的异常,如属性不存在或则不支持赋值等;
  2. EOFError:使用input()函数读文件时,遇到文件结束标志EOF时发生的异常。文件对象的read()和readline()方法遇到EOF时返回空字符串,不会引发异常;
  3. ImportError:导入模块出错引发的异常;
  4. IndexError:使用序列对象的下标超出范围时引发的异常;
  5. StopIteration:迭代器没有进一步可迭代元素时引发的异常;
  6. IndentationError:使用了不正确的缩进时引发的异常;
  7. TabError:使用Tab键和空格缩进时不一致引发的异常;
  8. TypeError:在运算或函数调用时,使用了不兼容的类型时引发的异常;
  9. ZeroDivisionError:除数为0时引发的异常。
3.捕捉多个异常 ?? 1、在异常处理结构中,可以使用多个except语句,已捕捉可能出现的多种异常。 代码示例如下:
x=[1,2] try: x[0]/0 except ZeroDivisionError: print("除0错误") except IndexError: print("索引下标超出范围") else: print("没有错误")

?? 2、可以在except语句中同时指定多种异常,以便使用相同的异常处理代码进行统一处理。在except语句中可以使用as为异常类创建一个实例对象。 代码示例如下:
x = [1,2] try: x[0]/0 except ZeroDivisionError as err: print("程序运行出错,错误信息如下:") print("异常类型:",err.__class__.__name__) print("异常信息:",err)

4.try…finally终止行为 ??在异常处理结构中,可以使用finally定义终止行为。不管try语句块中是否发生异常,finally语句块中的代码都会执行。 代码示例如下:
def function(): try: print(5/0) except: print("出错了") finally: print("finally部分已执行")#不管是否发生异常都会执行 print("程序运行结束") function()#执行函数

5.主动引发异常 ??并非只有在程序运行出错时才可引发异常,Python允许在代码中使用raise或assert语句主动引发异常。 5.1、raise语句基本格式如下:
raise 异常类名
raise 异常类实例对象
raise
raise语句基本用法如下:
# 1、类名引发异常 raise IndexError # 2、创建异常类的实例对象后引发异常 x = IndexError() raise x # 3、不带参数的raise语句可再次引发刚刚发生过的异常,其作用就是向外传递异常 try: raise IndexError#引发异常 except: print("程序运行出错了") raise#再次引发异常 # 4、在使用raise语句引发异常时,可以为异常类指定描述信息 raise IndexError("索引下标超出范围") # 5、异常链:异常引发异常 #可以使用raise…from…语句,使用异常来引发另一个异常 try: 5/0 except Exception as x: raise IndexError("下标越界")from x#引发另一个异常

5.2、assert语句基本格式如下:
??assert语句在“测试表达式”的值为假时,引发AssertionError异常,data作为异常描述信息。

assert测试表达式,data

assert语句基本用法如下:
try: import math x = 5 assert x>=0,'参数x必须是非负数' except Exception as err: print("程序运行出错,错误信息如下:") print("异常类型:",err.__class__.__name__) print("异常信息:",err)

6.自定义异常类 ??自定义异常类可以提供常规异常处理之外的自定义操作。
?? 所有异常类独有共同的超类:BaseException、Exception。

  1. BaseException类是所有异常类的顶级超类。不能直接继承BaseException类来定义自己的异常类;BaseException类的唯一子类是Exception类。BaseException类为子类提供了默认的打印和状态保持行为。在创建异常类实例对象时,可以用一个字符串作为异常描述信息。在打印异常类实例对象时,显示异常描述信息。
  2. Exception类是其他所有Python内置异常类的超类,除了GeneratorExit、KeyboardInterrupt和SystemExit。通常用户自定义的异常类均使用Exception类作为超类。在使用try语句处理异常时,可指定捕捉Exception异常,而不是空的except。这样可以更明确的捕捉异常,并可通过异常实例对象获得更多信息。
总结 ??异常可以在程序运行过程中进行捕捉,进行处理,从而避免程序意外崩溃。对程序执行异常处理,是一种良好的编程习惯。

    推荐阅读