关于人工智能:25-错误处理与异常

接下来咱们将学习Python中的错误处理和异样。在编写程序时,咱们常常会遇到各种谬误。Python应用异样(exception)来示意在程序运行时产生的谬误。理解如何解决异样对编写牢靠、强壮的程序至关重要。

1. 异样

异样是在程序运行过程中产生的谬误事件。当Python解释器遇到谬误时,它会引发一个异样。例如,拜访不存在的列表元素会引发IndexError异样,而尝试除以零会引发ZeroDivisionError异样。

以下是一个抛出异样的示例:

def divide(a, b):
    return a / b

result = divide(4, 0)  # ZeroDivisionError: division by zero

在这个例子中,咱们定义了一个名为divide的函数,用于执行除法运算。当咱们尝试除以零时,Python会抛出ZeroDivisionError异样。

2. 异样解决

为了解决异样,咱们能够应用tryexcept语句。try语句用于包裹可能引发异样的代码块,而except语句用于捕捉特定类型的异样并执行相应的代码块。

以下是一个解决异样的示例:

def safe_divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        print("Cannot divide by zero!")
        return None

result = safe_divide(4, 0)  # Cannot divide by zero!
print(result)  # None

在这个例子中,咱们定义了一个名为safe_divide的函数,用于执行除法运算。咱们应用try语句包裹可能引发异样的代码,并应用except语句捕捉ZeroDivisionError异样。当异样产生时,咱们打印一条谬误音讯并返回None

3. 多个except语句

咱们能够应用多个except语句来解决不同类型的异样。例如:

def safe_divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        print("Cannot divide by zero!")
        return None
    except TypeError:
        print("Invalid input!")
        return None

result = safe_divide(4, "two")  # Invalid input!
print(result)  # None

在这个例子中,咱们减少了一个except语句来捕捉TypeError异样。当咱们尝试应用一个非数值类型作为除数时,Python会抛出TypeError异样。

4. finally语句

finally语句用于指定无论异样是否产生,都须要执行的代码块。例如:

def safe_divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        print("Cannot divide by zero!")
        return None
    except TypeError:
        print("Invalid input!")
        return None
    finally:
        print("Finished dividing.")

result = safe_divide(4, 2)  # Finished dividing.
print(result)  # 2.0

result = safe_divide(4, 0)  # Cannot divide by zero!
                             # Finished dividing.
print(result)  # None

在这个例子中,咱们应用finally语句指定了一个无论异样是否产生,都须要执行的代码块。在这种状况下,咱们在每次调用safe_divide函数时都会打印”Finished dividing.”。

5. 自定义异样

咱们能够通过继承BaseException类或其子类来定义自定义异样。例如:

class InvalidInputError(Exception):
    pass

def safe_divide(a, b):
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        raise InvalidInputError("Both a and b must be numbers.")
    if b == 0:
        raise ZeroDivisionError("Cannot divide by zero.")
    return a / b

try:
    result = safe_divide(4, "two")
except InvalidInputError as e:
    print(e)  # Both a and b must be numbers.
在这个例子中,咱们定义了一个名为`InvalidInputError`的自定义异样类,用于示意有效的输出。咱们批改了`safe_divide`函数,使其在遇到有效输出时抛出`InvalidInputError`异样。而后咱们应用`try`和`except`语句捕捉并解决这个异样。

### 6. 异样链

有时,咱们可能须要在解决异样时引发新的异样。为了保留原始异样的上下文信息,咱们能够应用`raise ... from ...`语句来创立异样链。例如:

```python
class ParsingError(Exception):
    pass

def parse_number(number_string):
    try:
        return int(number_string)
    except ValueError as e:
        raise ParsingError("Invalid number format.") from e

try:
    result = parse_number("12a")
except ParsingError as e:
    print(f"{e} - Original exception: {e.__cause__}")

在这个例子中,咱们定义了一个名为ParsingError的自定义异样类,用于示意解析谬误。咱们创立了一个名为parse_number的函数,该函数尝试将字符串转换为整数。当转换失败时,咱们应用raise ... from ...语句引发一个新的ParsingError异样,并保留原始ValueError异样作为上下文信息。

7. 断言

断言(assertion)是一种用于检查程序中的条件是否满足预期的调试工具。当断言条件为False时,Python会抛出一个AssertionError异样。咱们能够应用assert语句来编写断言。例如:

def calculate_area(width, height):
    assert width > 0, "Width must be positive."
    assert height > 0, "Height must be positive."
    return width * height

try:
    area = calculate_area(-1, 5)
except AssertionError as e:
    print(e)  # Width must be positive.

在这个例子中,咱们创立了一个名为calculate_area的函数,用于计算矩形的面积。咱们应用assert语句来查看输出的宽度和高度是否为负数。当输出不满足条件时,会抛出一个AssertionError异样。

请留神,断言应仅用于调试程序和捕捉非预期的谬误。在生产环境中,您应该应用异样解决来解决可能的谬误状况。

这就是Python中错误处理与异样的基本概念。心愿这些示例能帮忙你更好地了解如何在Python中解决异样。如果你有任何问题,请随时发问。
举荐浏览:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理