python异常机制

 1 try和expect

"""
语法:
try:
    逻辑性的代码
except:
    逻辑性代码(一旦try里面的代码,出了异常,就会立即去执行这个except)
"""

2 try和finally

"""
try ... except ...  -- 捕捉异常,try出了异常,就会执行except里面的代码

try ... finally ...

finally:无论程序是否发生异常,都会去执行这个finally代码

语法规则:
try:
    逻辑性代码
finally:
    逻辑性代码
"""

3. 示例:

import logging

logging.basicConfig(level=logging.INFO)
try:
    logging.info("报错之前的代码")
    n = 1 / 0
    logging.info("报错之后的代码")
    
# # Exception 是所有的异常,AttributeError表示对象没有某个属性或方法 报出的异常,区别就是一个是针对于某个类型的错误,一个是所有的错误
# except AttributeError as e:
except Exception as e:  
    logging.warning("对try异常的处理信息")
    logging.error("具体的报错内容:", str(e))    # 将e转换为字符串格式,字符串之间拼接, 以防止万一
finally:
    logging.info("不管程序会不会出现异常,反正我都要执行")

4.raise ValueError

在Python中,raise ValueError 是用来引发一个 ValueError 异常的语句。ValueError 是内置的异常类型之一,通常用于指示一个操作或函数接收到了一个具有正确类型但值不合适的参数。

使用场景

ValueError 常用于以下情况:

  • 函数接收到一个不合适的参数值。
  • 数据转换失败,例如将一个字符串转换为整数时,该字符串不是有效的数字。

示例

以下是一个简单的示例,展示如何使用 raise ValueError

def divide(x, y):
    if y == 0:
        raise ValueError("The denominator cannot be zero.")
    return x / y

try:
    result = divide(10, 0)
except ValueError as e:
    print(f"Error: {e}")

在这个示例中,如果尝试用零作为分母,函数会引发一个 ValueError,并在 try 块中捕获这个异常,输出相应的错误信息。

总结

使用 raise ValueError 可以帮助你在代码中显式地报告错误情况,使得程序在遇到不合适的参数时能够优雅地处理异常情况。

5.raise Exception 

在Python中,raise Exception 是用来引发一个通用的异常。Exception 是所有内置异常的基类,因此使用 raise Exception 可以用于引发一个通用的错误,但通常不推荐这样做,因为它会使得错误处理变得不够具体。

使用场景

  • 通用错误:当你想要引发一个不特定类型的错误时,可以使用 raise Exception
  • 占位符:在开发过程中,可能会暂时使用 raise Exception 来标记尚未实现的功能或逻辑。

示例

以下是一个简单的示例,展示如何使用 raise Exception

def check_positive(number):
    if number < 0:
        raise Exception("The number must be positive.")

try:
    check_positive(-5)
except Exception as e:
    print(f"Error: {e}")

在这个示例中,如果传入一个负数,函数会引发一个通用的 Exception,并在 try 块中捕获这个异常,输出相应的错误信息。

不推荐使用

虽然可以使用 raise Exception,但通常建议使用更具体的异常类型,例如 ValueErrorTypeErrorKeyError 等,以便更好地描述错误的性质和上下文。这有助于提高代码的可读性和可维护性。

例外情况

如果你需要引发一个特定的异常,可以这样做:

raise ValueError("This is a value error.")

总结来说,虽然 raise Exception 是有效的,但在大多数情况下,选择更具体的异常类型会更加合适和有意义。

6.raise AssertionError

在Python中,raise AssertionError 用于引发一个 AssertionError 异常。AssertionError 通常在使用 assert 语句时自动引发,但你也可以显式地使用 raise 语句来引发它。

使用场景

  • 断言失败:当程序的某个条件不满足时,可以使用 raise AssertionError 来显式地报告这一点。
  • 调试:在开发过程中,可以用来检查某些假设是否成立,以便在条件不满足时及时发现问题。

示例

以下是一个简单的示例,展示如何使用 raise AssertionError

def check_age(age):
    if age < 0:
        raise AssertionError("Age cannot be negative.")

try:
    check_age(-1)
except AssertionError as e:
    print(f"Error: {e}")

在这个示例中,如果传入一个负数作为年龄,函数会引发一个 AssertionError,并在 try 块中捕获这个异常,输出相应的错误信息。

使用 assert

通常情况下,AssertionError 是通过 assert 语句引发的。例如:

def check_age(age):
    assert age >= 0, "Age cannot be negative."

try:
    check_age(-1)
except AssertionError as e:
    print(f"Error: {e}")

在这个例子中,assert 语句会检查条件,如果条件为 False,则会引发 AssertionError,并输出指定的错误消息。

总结

使用 raise AssertionError 可以帮助你在代码中显式地报告一个假设的失败,通常用于调试和验证程序的正确性。尽管 assert 语句更常用,但在某些情况下,显式地引发 AssertionError 也可以提供更好的控制和灵活性。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值