【Python】异常处理

什么是异常处理?

在Python中,异常是一个事件,该事件会在程序执行期间发生,影响程序的正常流程。当Python脚本遇到一个错误时,它将创建一个异常对象。如果这个异常没有被处理,程序将终止并显示一个错误信息。异常处理是确保程序健壮性和错误管理的关键机制。

常见的异常错误

  1. SyntaxError:语法错误
  2. IndexError:索引超出序列的范围
  3. KeyError:字典中查找一个不存在的关键字
  4. FileNotFoundError:输入/输出操作失败,文件未找到
  5. ValueError:传入无效的参数
  6. TypeError:操作或函数应用于不适当类型的对象
  7. ZeroDivisionError:尝试除以零时
  8. OverflowError:数值计算结果太大而无法表示
  9. MemoryError:程序运行时内存不足
  10. AssertionError:断言语句(assert)失败时抛出

基本异常处理语句

Python中的异常处理主要依赖于四个关键词:try, except, else, 和 finally

  • try: 这个块让Python尝试执行其中的代码。如果代码执行过程中发生异常,Python将停止当前块的执行,并寻找相应的except块。
  • except: 这部分代码在try块中的代码引发异常时执行。可以指定一个特定的异常来捕获,或者一系列异常放在一个元组中,或者捕获所有异常。
  • else: 如果try块没有引发异常,将执行这个块的代码。(可选)
  • finally: 无论是否引发了异常,finally块中的代码都会被执行。这常用于执行一些清理工作,例如关闭文件。(可选)
try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以零")
else:
    print(f"除法成功,结果为: {result}")
finally:
    print("运行完成,可能成功或者失败")

可以通过一个except子句来捕获多个异常,方法是将异常类作为元组列出。

try:
    x = int(input("请输入一个数字: "))
    result = 10 / x
except (ZeroDivisionError, ValueError) as e:
    print("发生错误:", str(e))
else:
    print("输入有效,结果为", result)

或者通过多个expect子句来分别捕获异常

try:
    x = int(input("请输入一个数字: "))
    result = 10 / x
except ZeroDivisionError as err1:
    print("发生错误:", str(err1))
except ValueError as err2:
    print("发生错误:", str(err2))
else:
    print("输入有效,结果为", result)

创建和使用自定义异常

在更复杂的应用中,可能需要定义自己的异常类型。自定义异常通过继承**Exception**类(或其子类)来创建。

class MyError(Exception):
    def __init__(self, message):
        self.message = message
    def __str__(self):
        return self.message

try:
    raise MyError("发生了一个自定义错误")
except MyError as e:
    print("捕获到自定义异常:", e)

关于类会在之后进行一次简单的总结

异常的传递

如果一个异常在当前的except块中未被处理,它将被传递到上一层的try块中,直到被处理或程序被迫停止。

def func():
    try:
        x = 1 / 0
    except KeyError:
        print("捕获 KeyError")
    finally:
        print("清理操作")

try:
    func()
except ZeroDivisionError:
    print("捕获除零错误")

断言(Assertions)

除了标准的异常处理,Python还提供了assert语句。assert用于检查代码中的某个条件,如果条件为假,则引发AssertionError

x = 1
assert x > 0, "x 必须大于 0"

注意事项

  1. 精确捕获异常:尽可能具体地捕获异常。这有助于准确地了解程序中可能出现的错误类型,并使错误处理更加明确。
  2. 清理资源:使用finally块或上下文管理器来确保文件和网络连接等资源被正确关闭。
  3. 避免过度使用try-except:不应该用异常处理来控制正常的程序流程。
  4. 记录异常:在生产环境中,将异常信息记录到日志中是一个好习惯。

这样的异常处理策略能够让Python程序更加健壮,并能在面对不确定和意外情况时,保持控制和稳定性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值