python-异常处理

什么是异常?异常和错误的区别

  •  Error 语法错误 比较明显的错误 在编译代码阶段就能检测出来
  • Iteration 异常 在执行代码的过程中引发的异常

异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下

python中的异常种类

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

l=['egon','aa']
l[3]
触发IndexError
dic={'name':'egon'}
dic['age']
触发KeyError
s='hello'
int(s)
触发ValueError
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

常用异常
常用异常

异常处理

异常发生之后的效果:

  •  一旦在程序中发生异常,程序就不再继续执行了

 

最简单的异常处理

# l = ['登录','注册','退出']
# for i in enumerate(l,1):
#     print(i[0],i[1])
# try:
#     num = int(input('num :'))
#     print(l[num-1])
# except IndexError:
#     print('请输入一个数字'

多分支异常处理

# l = ['登录','注册','退出']
# for i in enumerate(l,1):
#     print(i[0],i[1])
# try:
#     num = int(input('num :'))
#     print(l[num-1])
# except ValueError:
#     print('请输入一个数字')
# except IndexError:
#     print('您输入的数字无效')

万能异常

# try:
#     name  # NameError
#     dic = {}
#     dic['key']
# except Exception as 变量名:
#     print(type(变量名),变量名,变量名.__traceback__.tb_lineno)

# 万能异常和其他分支合作 : 万能异常永远要放在所有except的最后
# try:
#     name
#     [][3]
#     import a
# except NameError:pass
# except IndexError:pass
# except Exception:pass

异常处理的其他机制

# 异常处理的其他机制
# try:
#     name
#     [][3]
# except IndexError:print('index error')
# except NameError:print('name error')

# try:
#     name
#     [][3]
# except (IndexError,NameError) as e:
#     print(e)

# try:
#     a = 1
#     # name
#     # [][3]
# except NameError:
#     print('name error')
# except Exception:
#     print('万能异常')
# else: # try中的代码正常执行 没有异常的时候会执行else中的代码
#     print('执行else了')
# finally: # 无论如何都会执行 操作系统资源归还的工作
#     print('执行finally了')
# try:
#     f = open('file','w')
#     # f.read()
#     exit()
# except:pass
#     # 复杂的逻辑
# finally:
#     f.close()
#     print('执行我啦')
#
# def func():
#     try:
#         f = open('file', 'w')
#         return f.read()
#     finally:
#         f.close()
#         print('执行我了')
#
# func()

# try/except
# try/except/else
# try/except/else/finally
# try/except/finally
# try/finally
异常处理的其他机制

主动抛异常

# try:
#     num = int(input('>>>'))
# except Exception:
#     print('在出现了异常之后做点儿什么,再让它抛异常')
#     raise  # 原封不动的抛出try语句中出现的异常

自定义异常

# 自定义异常
# raise NameError('这是一个name error的异常')
# class EvaException(Exception):
#     def __init__(self,msg):
#         self.msg = msg
#
# raise EvaException('这是一个什么什么错误,有什么问题')

断言

# 断言
# assert 布尔值
# assert True
# if False:
#     print(1234234)
# else:
#     raise AssertionError

 

posted @ 2020-11-03 17:03  断浪狂刀忆年少  阅读(103)  评论(0编辑  收藏  举报