异常捕获

2019-02-11  本文已影响0人  匿隱

1.异常捕获 - 让本该报错的代码不报错

<你知道某段代码会出现异常,而且没有办法避免,同时又希望出现异常的时候程序不奔溃;
这个时候就可以通过异常捕获,来让程序不奔溃并且自行处理异常

2.异常捕获语法

a. try-except (可以捕获所有类型的异常 - 只要代码段1中出现了异常就捕获)

try:
     代码段1(可能会出现异常的代码段)
except:
     代码段2(出现异常后处理异常的代码段)

其他语句

执行过程: 执行代码段1,如果代码段1中出现异常,程序不奔溃,直接执行代码段2。
如果代码段1中没有出现异常,不执行代码段2而是直接执行后面的其他语句

b. try - except 错误类型 (捕获指定类型的异常 - 只有代码段1中出现了指定类型的异常才捕获)

try:
    代码段1(可能会出现异常的代码段)
except 错误类型:
     代码段2(出现异常后处理异常的代码段)

c.try - except (错误类型1,错误类型2...) (同时捕获多种指定异常)

try:
     代码段1(可能会出现异常的代码段)
except (错误类型1,错误类型2...):
     代码段2(出现异常后处理异常的代码段)

d.try-except 错误类型1 - except 错误类型2... (同时捕获多种异常,可以对不同的异常做不同的处理)

try:
     代码段1(可能会出现异常的代码段)
except 错误类型1:
     代码段2
except 错误类型2:
     代码段3
...

3.抛出异常 - 主动让程序奔溃

raise 错误类型 - 程序执行到这句代码就出现指定类型的异常!

说明:错误类型 - 可以是系统提供的错误类型, 也可以是自定义错误类型(要求这个值必须是一个类,而且是Exception的子类)

自定义错误类型

class YTValueError(Exception):
    def __str__(self):
        return '给的值不满足要求!'


def yt_function(age: int):
    """
    age必须小于18!!!
    """
    if age > 18:
        raise YTValueError
    print(age)


yt_function(20)
def method3():
    print('==============2.try-except 错误类型1-except 错误类型



    try:
        with open('abc.txt', 'r') as f:
            print(f.read())
        print({'a': 100}['b'])  # KeyError
    except KeyError:
        print('key不存在')
    except FileNotFoundError:
        print('文件不存在!')

    print('~~~~~~~~~')
def method2():
    print('==============2.try-except 错误类型===========')
    try:
        print({'a': 100}['b'])  # KeyError
        print(a)
        print([1, 2, 3][4])  # IndexError
    except (KeyError, IndexError):
        print('出现异常')
def method1():
    print('==============1.try-except===========')
    # try:
    #     number = int(input('请输入一个数字:'))
    #     print(number)
    # except:
    #     print('出现异常,输入有误!')

    try:
        print('abc'[4])   # IndexError
        print('=======')
        print({'a': 10}['b'])  # KeyError
    except:
        print('出现异常!')

练习: 输入数字,保存成int类型,如果输入有误就继续输入,直到输入正确为止!

输入数字: 12a 输入有误,继续输入! 输入数字:a12 输入有误,继续输入! ... 输入数字: 23

def method11():
    print('==============1.try-except===========')
    while True:
        try:
            number = int(input('输入数字:'))
            print('输入正确:', number)
            break
        except:
            print('输入有误,继续输入!')


def main():
    # method1()
    # method11()
    method3()
上一篇 下一篇

猜你喜欢

热点阅读