Python异常处理(七)

简介: Python异常处理(七)

异常处理

一.什么是异常

程序运行的过程中出现了错误

  • 定义:在程序运行中,检测到一个错误,程序中止运行并且出现了一些错误的提示,也称作BUG
  • 例如:读取一个不存在的文件f = open("C:/code/观止.txt", "r")

二.为什么要捕获异常

避免程序中止,提前准备处理可能出现的异常

  • 在真实工作中, 我们肯定不能因为一个小的BUG就让整个程序全部奔溃,而是对BUG进行提醒, 整个程序继续运行

三.如何捕获异常

在可能出现异常的地方,做好提前准备,当真的出现异常的时候,可以有后续手段。

(1) 捕获常规异常

  • 基本语法:
try:
    可能发生错误的代码
except:
    如果出现异常执行的代码
    
# 未发生错误try全部代码都会执行
# 未发生错误不会执行except中的代码
# 发生错误try中只会执行到报错行为止的代码
# 发生错误会except中的代码
  • 使用示例:
  • 首次执行,文件不存在,程序未报错中止,而是转而执行except中代码,创建文件
try:
    print("r模式打开") # 执行
    f = open("C:/code/观止.txt", "r") # 报错
    print("r模式打开") # 不执行
except:
    print("w模式打开") # 执行
    f = open("C:/code/观止.txt", "w") # 执行
    print("w模式打开") # 执行

  • 第二次执行,文件存在,程序无异常,只执行try中代码
try:
    print("r模式打开") # 执行
    f = open("C:/code/观止.txt", "r") # 执行
    print("r模式打开") # 执行
except:
    print("w模式打开") # 不执行
    f = open("C:/code/观止.txt", "w") # 不执行
    print("w模式打开") # 不执行

(2) 捕获特定异常

  • 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
  • 基本语法:
try:
    可能发生错误的代码
except 待捕获异常名 as 别名:
    如果出现异常执行的代码
  • 例如:
  • 捕获未定义变量产生的错误
try:
    print(name) # 未定义变量,报错
except NameError as e:
    print('name变量名称未定义错误')

  • 同样的代码却无法捕获处理找不到文件异常
try:
    f = open("C:/code/study.txt", "r") # 文件不存在,报错
except NameError as e:
    print('文件不存在')

(3) 捕获多个异常

  • 格式一:当待捕获异常名为Exception可以捕获所有类型异常,作用与(1)一致
  • 例如:
try:
    f = open("C:/code/study.txt", "r")
except Exception as e:
    print('文件不存在')

  • 格式二:把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。
  • 基本格式:
try:
    可能发生错误的代码
except (异常名1,异常名2) as 别名:
    如果出现异常执行的代码
  • 使用示例:
# 示例一:
try:
    f = open("C:/code/study.txt", "r")
except (FileNotFoundError, NameError) as e:
    print('文件不存在')
# 示例二:    
try:
    print(name)
except (FileNotFoundError, NameError) as e:
    print('名称未定义')
  • 指定的两种异常都能捕获,未指定的无法捕获到

(4) 其他用法

(4.1) 打印异常信息

  • 异常描述信息存贮在别名中,可以通过打印别名获取
  • 使用示例:
try:
    print(num) # 未定义,报错
except (NameError, ZeroDivisionError) as e:
    print(e) # 打印 name 'num' is not defined

(4.2) 异常else

  • else表示的是如果没有异常要执行的代码。
  • 使用示例:
  • 出现异常,打印结果与(4.2)一致
try:
    print(num) # 未定义,报错
except (NameError, ZeroDivisionError) as e:
    print(e) # 打印 name 'num' is not defined
else:
    print("无异常") # 有异常,不执行
  • 无异常
try:
    print("正常") # 不报错
except (NameError, ZeroDivisionError) as e:
    print(e) # 不执行
else:
    print("无异常") # 执行

(4.3) 异常finally

  • finally表示的是无论是否异常都要执行的代码
  • 使用示例:
  • 之前提过,如果open文件却一直未close且程序未中止,将一直占用文件无法操作
  • 如果打开文件后发生异常,未close也将导致一直占用,因此可选择在finally中close
global f
try:
    f = open("C:/code/aaa.txt", "r")
except Exception as e:
    print(e)  
finally:
    f.close() # 一定会执行close操作

四.异常的传递

异常是具有传递性的(向上一级抛出)

  • 当函数调用链中出现异常,如果所有函数都没有捕获异常的时候, 程序就会报错

  • 利用异常具有传递性的特点, 当我们想要保证程序不会因为异常崩溃的时候, 就可以在主函数中设置异常捕获, 由于无论在整个程序哪里发生异常, 最终都会传递到主函数中, 这样就可以确保所有的异常都会被统一捕获
目录
相关文章
|
1月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
|
1月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
|
3月前
|
数据库连接 Python
Python中的异常处理除了Try语句,你还会啥?
Python中的异常处理除了Try语句,你还会啥?
60 1
|
3月前
|
Python
|
2月前
|
Python
Python编程中的异常处理:理解与实践
【9月更文挑战第14天】在编码的世界里,错误是不可避免的。它们就像路上的绊脚石,让我们的程序跌跌撞撞。但是,如果我们能够预见并优雅地处理这些错误,我们的程序就能像芭蕾舞者一样,即使在跌倒的边缘,也能轻盈地起舞。本文将带你深入了解Python中的异常处理机制,让你的代码在面对意外时,依然能保持优雅和从容。
156 73
|
1月前
|
安全 Java 程序员
Python 异常处理!
本文详细介绍了Python中的异常处理,包括try、except和finally语句的使用方法。文章区分了语法错误与异常,并列举了Python中常见的异常类型,如`SyntaxError`、`TypeError`等。通过具体示例展示了如何使用try-except块捕获和处理异常,以及如何结合else和finally子句增强代码的健壮性和可读性。此外,还介绍了如何使用raise语句主动抛出异常。通过合理的异常处理,可以提高程序的可靠性与调试效率,但也可能带来性能开销和代码复杂度的增加。
36 4
|
1月前
|
IDE 开发工具 开发者
Python中的异常处理与调试技巧
【9月更文挑战第32天】在软件开发中,错误和异常是难以避免的。了解如何有效处理这些情况对于编写健壮、可靠的代码至关重要。本文将深入探讨Python中的异常处理机制,介绍如何使用try-except语句捕捉异常,以及如何利用Python的调试工具来诊断问题。通过实际示例,我们将展示如何优雅地处理异常并提高代码质量。
|
2月前
|
对象存储 索引 Python
30天拿下Python之异常处理
30天拿下Python之异常处理
31 3
|
1月前
|
安全 数据库连接 开发者
深度解析Python上下文管理器:优雅资源管理与异常处理
深度解析Python上下文管理器:优雅资源管理与异常处理
20 0
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 讨厌的异常处理
本文详细讨论了Python中的异常处理机制,包括异常捕获、异常抛出、自定义异常、环境清理,以及使用上下文管理器确保资源正确释放,最后还提到了Python的标准异常类。
33 1

热门文章

最新文章