Python学习之路——异常捕获

发布时间:2024年01月17日

一、什么是异常

当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”,也就是bug

二、异常的捕获方法

当我们的程序遇到bug,那么就下来有两种情况

①整个程序因为一个bug停止运行

②对bug进行提示,整个程序继续运行

捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。

1、捕获常规异常

(一)基本语法

try:

? ? ? ? 可能发生错误的代码

except:

? ? ? ? 如果出现异常执行的代码

?(二)快速入门

需求:尝试以‘r’模式打开文件,如果文件不存在,则以‘w’方式打开

try:

? ? ? ? f = open('python.txt', 'r, encoding = 'utf-8')

except:

? ? ? ? f = open('python.txt', 'w, encoding = 'utf-8')

2、捕获指定异常

try:

? ? ? ? print(1 / 0)

except NameError as a:

? ? ? ? print(f'出现变量名称异常:{a}')

except ZeroDivisionError as b:

? ? ? ? print(f'出现^异常:{b}')

3、捕获多个异常

try:

????????# print(name)

? ? ? ? 1 / 0

except (NameError, ZeroDivisionError) as a:

????????print(f'捕获到的异常是:{a}')?

4、捕获全部异常

# 两种一样的写法,都可以捕获到全部异常

# 第一种方式

# try:

#

# except:

# 第二种方式

try:

? ? ? ? # print(name)

? ? ? ? 1 / 0

except Exception as a:

? ? ? ? print(f'出现异常了:{a}')

5、异常else/finally:

(这两个参数是可选的)

else表示的是如果没有异常要执行的代码

name = 'hello'
try:
    print(name)
except Exception as a:
    print(f'出现异常了,且为{a}类型')
    # finally一般用在文件的相关操作中,因为不管怎么最后都要关闭文件
finally:
    print('hello,不管怎样我都会在的')

三、异常具有传递性

1、怎么理解呢

当函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02中,当func02也没有捕获处理这个异常的时候,main函数会捕获这个异常,这就是异常的传递

需要注意的是:

当所有函数都没有捕获异常的时候,程序就会报错

程序结果:

2、代码示例

# 定义一个出现异常的函数
def func01():
    print('这是func01函数的起始')
    print(name)
    print('这是func01函数的结束')


# 定义一个不会出现异常的函数
def func02():
    print('这是func02函数的起始')
    func01()
    num = 1 / 0
    print('这是func02函数的结束')


# 定义一个函数调用上面的函数
def main():
    print('main函数开始执行')
    try:
        func02()
    except Exception as a:
        print(f'出现异常了,并且异常为:{a}')
    finally:
        print('我一直都在')
    print('main函数执行完毕')


if __name__ == '__main__':
    main()

程序执行结果:

从程序的执行结果可以看出

①执行的是main函数

②进入函数func02

③进入函数func01

④由于函数func01中出现了错误,导致并非正常退出函数,而是中断函数

⑤执行finally

⑥输出最后一个print语句

四、总结

干货可能不多,但是的确不难,异常可以提高程序的健壮性,还是可以在之后自己开发的程序中加入异常捕获的。

文章来源:https://blog.csdn.net/weixin_57154777/article/details/135661858
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。