成长之路--从0开始学python(11)--异常处理

当异常被触发之后,程序不会再运行

异常处理的作用:

尽量让程序正常运行

尽早发现问题,尽早解决问题

异常类型

-IndexError

# 1.IndexError

mlist = [5,6,7]
print(mlist[100])

当异常被触发,接下来的代码就不会再运行

NameError

#2.NameError
#变量异常
print(a)
#没有定义变量,找不到变量

使用一个还没赋予对象的变量

使用一个变量的时候一定要确保它定义了

- SyntaxError

#3.SyntaxError
#语法错误
print("hello"))
#对python语法不熟悉

 代码逻辑语法出错,不能执行,不能捕获

-ImportError

#8.ImportError
from homework.list_change_dict import abc
key = [1,2,3]
a = get_dict(key,value)
print(a)
#无法引入模块的变量

 无法引入模块的变量

-TypeError

#7.TypeError
from homework.list_change_dict import get_dict
key = [1,2,3]
a = get_dict(key)
print(a)
#传入的对象类型与要求不符合

 传入的对象类型与要求不符合

-ModuleNotFoundError

#9.ModuleNotFoundError
from list_change_dict import get_dict
key = [1,2,3]
a = get_dict(key,value)
print(a)
#没有找到该模块

没有找到该模块

KeyError

#4.KeyError
#键异常
dict_1 = {"name":"conlin"}
print(dict_1["age"])
#字典里没有这个键

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

-ValueError

#5.ValueError
#数据异常
print(int("abc"))
#输入的值异常,比如要输入数字.但是输入了字符串.一般出现在input数字进行计算时

传入一个不被期待的值,即使类型正确

-IOError

文件操作 输入输出异常

处理异常

-分析问题

  1. 异常在python一般会出现提示
  2. 分析异常提示
  3. 会提示在哪个文件,哪一行代码出现异常
  4. 再把异常类型,信息,复制出来,搜索

-异常捕获

  1. 找到异常类型
  2. 异常分析
  3. 找到触发异常的代码

   

语法:

把可能会出现异常的代码写入try里

try:

        可能出现异常的代码

        如果正常执行 则不会被捕获 不会执行except

        如果触发异常,则到except

except 异常类型的名称 as 变量名:

   出现异常后的操作

无论是否捕获异常,都不会影响下面程序的运行

把具体的异常内容放到一个变量里,可以打印出来

except后面加了异常类型的名称后代表只捕获指定的异常类型

不写异常类型名称或者用exception,表示捕获所有的异常,不要轻易使用,不同的异常类型,要用不同的方案处理

#捕获指定类型
a = [1,2,3]
index = 100
try:
    value = a[index]
    1/0
    print("触发异常了吗")
except IndexError as err:
    #只捕获IndexError
    #把具体的异常信息放到一个变量

    print(f"""index索引出现问题,比较严重,麻烦修复:{err}""")
except ZeroDivisionError as e:
    print(f"""计算错误,首要错误,通知工程师{e}""")

#不能同时触发2个异常,只能捕获一个异常

print("继续运行")

 照代码从上到下运行的顺序,当执行到value=a[index]的时候,因为出现异常,马上被except捕获,

所以之后的1/0不会执行,也不会被第二个except捕获

-异常类型的具体用法

#具体用法
#开始先不要写try,当程序已经报错了再写

#输入abc
age = input("输入年龄")
try:
    age = float(age)

    if age > 18:      #要正常执行后才能继续操作,不能放在异常处理的外面,因为异常还没解决
        print("成年人")
    else:
        print("未成年")
except ValueError as e:
    print("你输入的是字母,请输入错误")

出现异常的代码是age = float(age)

如果if写在try外面,仍然会报错,因为age还没执行转换

要能够正常执行操作才能继续判断

try...except...else

当程序没有出错的时候,会执行else的语句,要是出错被捕获.则不执行else

age = input("输入年龄")
try:
    age = float(age)

except ValueError as e:
    print("你输入的是字母,请输入错误")
else:
    if age > 18:  
        print("成年人")
    else:
        print("未成年")

-主动抛出异常

 异常类型和信息可以自定义

 raise 主动抛出异常信息,一般接在判断语句后面

#主动抛出异常
def add(a,b):
    #a,b带有要求
    if a >10 or b < 3:
        raise ValueError("输入数据有误")
    c = a + b
    return c
print(add(6,1)

 利用异常捕获

#主动抛出异常
def add(a,b):
    #a,b带有要求
    if a >10 or b < 3:
        raise ValueError("输入数据有误")
    c = a + b
    return c

try:
    a = add(6,1)
    print(a)
except ValueError as err:
    print(err)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值