Python异常

1. 异常的作用

异常通常就是我们说的程序报错

当异常被抛出(触发)之后,后面的代码就不会再运行

异常处理的作用:尽量让程序正常运行,尽早发现问题

list = [1,2,3]
print(list[4]) # 索引超出范围,会报错
print('continue...') # 此行代码不会执行

 运行结果:

2. 异常的类型

--  ImportError:无法引入模块或包

--  IndexError:下标索引超出序列边界

--  NameError:使用一个还未赋予对象的变量

--  SyntaxError:代码逻辑语法出错,不能执行,不能去捕获

--  TypeError:传入的对象类型与要求不符

--  ValueError:传入一个不被期望的值,即使类型正确

--  KeyError:试图访问你字典里不存在的键

--  IoError:输入输出异常

2.1 NameError

age = -1
if age > 18:
    name = 'yuz'
elif age > 0:
    name = 'v'
print(name)  # 没有符合条件,所以不执行,所以name没有定义

运行结果:

 在写代码过程中,经常会出现此错误,一定要注意变量要先定义再使用

 2.2 SyntaxError

age = -1
if age > 18 # 缺少:导致报错
    name = 'yuz'
elif age > 0:
    name = 'v'
print(name)

运行结果:

语法错误是容易出现的,多注意一下语法格式,就不会出现此类错误

 2.3 KeyError/ValueError

info = {'name':'zhangsan'}
print(info['age'])

运行结果:

print(int('asd'))

运行结果:

 2.4 TypeError

age = input('请输入年龄')
if age >= 18:
    print('成年人')
else:
    print('未成年')

运行结果:

 

出现异常,应该如何处理:首先是分析是异常提示,不懂就百度翻译一下,点击蓝色链接可以直接跳转到出现异常的那行代码

3. 异常的捕获

3.1 捕获异常

格式:

try:

     是你觉得可能会出现异常的代码

except: 

      出现异常时,你会进行的操作

注意:

--  当捕获了异常,也就是执行了 except 里的内容,还会接着执行后面的代码,不会影响后面代码

--  当 try 正常执行了,就不会执行 except 的内容

--  try 和 except 的代码,只会执行其中一个,不会同时执行,即要么有异常(执行 except 代码),要么无异常(执行 try 的代码)

a = [1, 23, 3]
index = 100
try:
    value = a[100]
    print('有异常吗?')
except:
    print('index索引出现了问题,麻烦开发赶紧来修复!')
print('continue...')

运行结果:

index索引出现了问题,麻烦开发赶紧来修复!
continue...

分析过程:

a = [1, 23, 3]
index = 100
try:
    value = a[1]
    print('有异常吗?')
except:
    print('index索引出现了问题,麻烦开发赶紧来修复!')
print('continue...')

 运行结果:

有异常吗?
continue...

 分析过程:

3.2 捕获指定异常

格式:

tyr:

     是你觉得可能会出现异常的代码

except   错误类型   as   变量名: 

      出现异常时,你会进行的操作

a = [1, 23, 3]
index = 100
try:
    value = a[18]
    print('有异常吗?')
except IndexError as err: # 只能捕获IndexError异常
    print(f'index索引出现了问题,麻烦开发赶紧来修复:{err}')
print('continue...')

 运行结果:

index索引出现了问题,麻烦开发赶紧来修复:list index out of range
continue...

3.3 捕获任意异常

 格式:

tyr:

     是你觉得可能会出现异常的代码

except   Excetion  as   变量名: 

      出现异常时,你会进行的操作 

a = [1, 23, 3]
index = 1
try:
    value = a[index] # 这条代码成立,没异常
    b = 1 / 0 # 所以执行这条代码,有异常
except Exception as err:
    print(f'计算错误:{err}')
print('continue...')

运行结果:

计算错误:division by zero
continue...

 注意:一次只能捕获一个异常,不会同时捕获多个异常

a = [1, 23, 3]
index = 1
try:
    value = a[index]
    1 / 1
    print(name)
except IndexError as err:
    print(f'索引超出范围:{err}')
except ZeroDivisionError as err:
    print(f'计算错误:{err}')
except Exception as err:
    print('万能警察')
print('continue...')

 运行结果:

万能警察
continue...

再举个栗子:

判断输入的年龄是否是数字,不是数字直接捕获异常,是数字再判断是否成年人

age = input('请输入年龄')
try:
    age = float(age)
    if age >= 18:
        print('成年人')
    else:
        print('未成年')
except ValueError as e:
    print('输入类型错误,请输入数字')

运行结果:

请输入年龄d
输入类型错误,请输入数字

 分析过程:

4. 主动抛出异常

raise(抛出的异常)

注意:遇到 raise 后,就不会执行后面的代码

def add(a, b):
    if (not isinstance(a,int)) or (not isinstance(b,int)):
        # 如果a或b不是整数,就抛出异常,像return一样,遇到了就不执行后面的代码
        raise ValueError('a 或 b 不是整数') 
    c = a + b
    return c
print(add('12',3))

运行结果:

5. finally

格式:

tyr:

     是你觉得可能会出现异常的代码

except   异常类型   as  变量名: 

      出现异常时,你会进行的操作 

finally:

     不管异常有没有被捕获都要执行的代码

age = input('输入年龄')
try:
    age = float(age)
    if age >= 18:
        print('成年人')
    else:
        print('未成年')
except ValueError as e:
    print('类型不正确,请输入数字')
finally:
    print('判断完成')
    print('continue...')

运行结果:

不管是否异常,finally里的代码都会执行

第一次输入年龄3

输入年龄3
未成年
判断完成
continue...

 第二次输入年龄aa

输入年龄aa
类型不正确,请输入数字
判断完成
continue...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值