Python中的异常处理

什么是异常???

    程序在运行过程中出现了不可预知的错误
    并且该错误没有对应的处理机制,那么就会以异常的形式表现出来
    造成的影响就是整个程序无法再正常运行

异常的种类

  1. 语法错误:是你程序立刻就能解决的

  2. 逻辑错误:一眼看不出来,是程序启动以后出现的

        针对逻辑上的错误,可以采用异常处理机制进行捕获

常见的错误类型:

   NameError      名字错误
       SyntaxError     语法错误
       KeyError          键不存在
       ValueError       值错误
       IndexError       索引错误

异常的结构:

  1. 异常的类型:如:NameError     

  2. 异常的信息:如:name 'fdsdfsdf' is not defined

  3. 异常的位置:如:Traceback (most recent call last):
                File "D:/python脱产10期视频/day29/01 异常处理.py", line 1, in <module>
                   fdsdfsdf

那么针对这些异常该如何避免呢????

# 简易模式

try:
    # 代码块
    name  # 会出现NameError错误,名字未被定义
except NameError:  # 捕获NameError错误
    ...  # 接下来要执行的代码块

try: i = [1, 2, 3] i[4] # 会出现IndexError错误,索引值超出范围 except IndexError: ... # 接下来要执行的代码块
try: d = {'name':'jason'} d['age'] # 会出现KeyError错误,键错误 ---所以推荐字典取值时候用get,没有键的时候返回None,不会报错 except KeyError: ... # 接下来要执行的代码块

# 此外,还可以将上述合并在一起

try:
    name
    
    i = [1, 2, 3]
    i[4]
    
    d = {'name':'jason'}
    d['age']
except Exception/BaseException:  # 万能异常,所有的异常类型都能捕获
    ...  # 接下来要执行的代码块

 补充:

try:
    name
    
    i = [1,2,3]
    i[5]
    
    d = {'name':'zhao'}
    d['age']
    
except Exception:
    ...
else:
    ...  # 被检测代码没有任何异常发生,才会走else     必须在except后面
finally:
    ...  # 无论被检测的代码是否有异常发生,都会在代码运行完毕之后执行
# 主动抛异常
# 关键词 raise
a = 3
if a == 1:
    pass
else:
    raise TypeError('a must be 1')

 Traceback (most recent call last):
   File "D:/代码练习/8.8/异常处理.py", line 56, in <module>
        raise TypeError('a must be 1')
 TypeError: a must be 1
# 断言
# 关键字:assert
i = 90
assert i < 100  # 断言i小于100,猜对了不影响代码执行,正常往下走;但是猜错了直接报错
print('哈哈,我猜对了!')  # 哈哈,我猜对了!
# 自定义异常

class MyError(BaseException):  # 需要继承BaseException
    def __init__(self):
        super().__init__()

    def __str__(self):
        # return '<我自己定义的错误信息提示...>'
        return '< a 必须为 1 >'

# 如:
a = 3
if a == 1:
    pass
else:
    raise MyError  # __main__.MyError: < a 必须为 1 >

# raise MyError('我自己定义的异常') 主动抛出异常起始就是将异常类的对象打印出来,会执行__str__方法

原文地址:https://www.cnblogs.com/pupy/p/11321499.html