Python--多种处理报错异常的方法

Python 提供了多种处理报错异常的方法,使程序能够在遇到错误时优雅地处理,避免程序崩溃,并给出有意义的反馈。以下是 Python 处理异常的主要方法以及它们的详细解释和示例:

1. try-except 语句

最基础的异常处理方式是使用 try-except 语句,捕获并处理可能发生的异常。

基本用法:
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Cannot divide by zero")
  • try:包含可能引发异常的代码。
  • except:捕获并处理特定类型的异常。
示例:
try:
    num = int(input("Enter a number: "))
    result = 10 / num
    print(f"Result is {result}")
except ZeroDivisionError:
    print("Error: Cannot divide by zero.")
except ValueError:
    print("Error: Invalid input. Please enter a valid number.")

2. 捕获多种异常

可以在 except 块中捕获多种异常类型,如果有多种可能的错误,可以使用多个 except 块,或者将异常类型放在一个元组中。

try:
    # 可能引发多种异常的代码
    num = int(input("Enter a number: "))
    result = 10 / num
    print(f"Result is {result}")
except (ZeroDivisionError, ValueError) as e:
    print(f"An error occurred: {e}")

3. try-except-else 结构

else 块在 try 块中代码没有抛出异常时执行。如果希望在没有异常的情况下执行某些操作,可以使用 else

try:
    num = int(input("Enter a number: "))
    result = 10 / num
except ZeroDivisionError:
    print("Error: Cannot divide by zero.")
except ValueError:
    print("Error: Invalid input. Please enter a valid number.")
else:
    print(f"Result is {result}")

4. try-except-finally 结构

finally 块中的代码无论是否抛出异常都会执行,通常用于资源清理,如关闭文件、释放锁等。

try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("Error: File not found.")
finally:
    file.close()  # 确保文件总是被关闭

5. 捕获所有异常

可以通过不指定异常类型,使用一个通用的 except 块来捕获所有异常。但这样做可能会掩盖真正的错误来源,因此在实际开发中应谨慎使用。

try:
    # 可能引发任何异常的代码
    result = 10 / int(input("Enter a number: "))
except Exception as e:
    print(f"An error occurred: {e}")

6. 自定义异常

在某些情况下,可能需要定义自己的异常类型。可以通过继承内置的 Exception 类来自定义异常类型,然后在程序中抛出和处理这些自定义异常。

定义自定义异常:
class NegativeNumberError(Exception):
    pass
使用自定义异常:
def check_positive(num):
    if num < 0:
        raise NegativeNumberError("Negative numbers are not allowed.")
    return num

try:
    num = int(input("Enter a positive number: "))
    check_positive(num)
except NegativeNumberError as e:
    print(e)

7. assert 语句

assert 语句用于调试时检查条件,如果条件为 False,则抛出 AssertionError 异常。

def divide(a, b):
    assert b != 0, "Cannot divide by zero"
    return a / b

try:
    print(divide(10, 0))
except AssertionError as e:
    print(e)

8. 使用 raise 重新抛出异常

在某些情况下,捕获异常后需要重新抛出异常,可以使用 raise 关键字。

try:
    num = int(input("Enter a number: "))
    if num == 0:
        raise ZeroDivisionError("Zero is not allowed.")
    result = 10 / num
except ZeroDivisionError as e:
    print(f"Handling error: {e}")
    raise  # 重新抛出异常

9. 上下文管理器和 with 语句

上下文管理器通常用于管理资源,结合 with 语句可以自动处理资源的分配和释放,同时支持异常处理。

try:
    with open("example.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError as e:
    print(f"File error: {e}")

10. 日志记录异常

使用 logging 模块可以记录异常信息,而不是简单地打印出来,这对于调试和维护大型项目特别有用。

import logging

logging.basicConfig(filename='error.log', level=logging.ERROR)

try:
    num = int(input("Enter a number: "))
    result = 10 / num
except ZeroDivisionError:
    logging.error("Attempted to divide by zero.")
except ValueError:
    logging.error("Invalid input. Expected a number.")

通过这些方法,Python 提供了灵活且强大的异常处理机制,使开发者能够有效地应对程序中的各种错误,确保程序的健壮性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值