Python中的异常处理与自定义异常

简介: Python中的异常处理与自定义异常


一、引言


在Python编程中,异常处理是一个至关重要的部分。它允许我们在程序运行时捕获和处理错误,确保程序的健壮性和稳定性。本文将详细介绍Python中的异常处理机制,包括内置的异常类型、try-except-finally语句的使用以及如何自定义异常。


二、Python中的异常类型


Python中内置了许多异常类型,这些异常类型代表了不同类型的错误。以下是一些常见的异常类型:

ZeroDivisionError:当除数为零时引发。

IndexError:当访问列表、元组、字符串等的索引超出范围时引发。

KeyError:在字典中查找不存在的键时引发。

ValueError:当函数或操作接收到无效参数时引发。

TypeError:当操作或函数应用于不适当类型的对象时引发。

NameError:当尝试访问未声明的变量时引发。

IOError(在Python 3中已更名为FileNotFoundError和PermissionError等):当发生I/O错误时引发,如文件不存在或没有读取权限。


三、try-except-finally语句


在Python中,我们使用try-except-finally语句来处理异常。try块包含可能引发异常的代码,except块用于捕获并处理异常,而finally块(如果有的话)无论是否发生异常都会执行。

下面是一个简单的例子,演示了如何使用try-except-finally语句来捕获和处理ZeroDivisionError异常:

def divide(a, b):
    try:
        result = a / b
        print(f"{a} / {b} = {result}")
    except ZeroDivisionError:
        print("除数不能为零!")
    finally:
        print("无论是否发生异常,这里都会执行。")
divide(10, 2)
divide(10, 0)
输出:
复制
10 / 2 = 5.0

无论是否发生异常,这里都会执行。

除数不能为零!

无论是否发生异常,这里都会执行。

在上面的例子中,当b为0时,会触发ZeroDivisionError异常,并在except块中捕获和处理。无论是否发生异常,finally块中的代码都会执行。


四、多异常处理


在except块中,我们可以使用多个异常类型来处理不同类型的异常。这可以通过在except关键字后面列出多个异常类型(用括号括起来,并用逗号分隔)来实现。以下是一个示例:

def read_file(filename):
    try:
        with open(filename, 'r') as file:
            content = file.read()
            print(content)
    except (FileNotFoundError, PermissionError) as e:
        print(f"发生错误:{e}")
    finally:
        print("无论是否发生异常,这里都会执行。")
read_file('example.txt')  # 如果文件不存在或没有读取权限,将触发异常

五、自定义异常


除了内置的异常类型外,我们还可以定义自己的异常类型。这可以通过创建一个继承自Exception或其他内置异常类的类来实现。自定义异常类通常用于表示程序中特定的错误情况。

下面是一个示例,演示了如何定义和使用自定义异常:

class MyCustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)
def check_age(age):
    if age < 0:
        raise MyCustomError("年龄不能是负数!")
    elif age > 150:
        raise MyCustomError("年龄似乎有些不合理...")
    else:
        print(f"年龄是 {age},一切正常。")
check_age(-10)  # 触发自定义异常
输出:
复制
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 5, in check_age
    raise MyCustomError("年龄不能是负数!")
__main__.MyCustomError: 年龄不能是负数!

在上面的示例中,我们定义了一个名为MyCustomError的自定义异常类,并在check_age函数中根据年龄值触发该异常。当年龄小于0时,将触发MyCustomError异常,并打印出相应的错误信息。

相关文章
|
1月前
|
人工智能 Shell 开发工具
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
本文介绍了Python中处理异常的基本方法,重点讲解了`try`和`except`的用法。通过一个计算苹果重量的小程序示例,展示了如何捕获用户输入错误并进行处理。主要内容包括: 1. **回顾上次内容**:简要回顾了Shell环境、Python3游乐场和Vim编辑器的使用。 2. **编写程序**:编写了一个简单的程序来计算苹果的总重量,但发现由于输入类型问题导致结果错误。 3. **调试与修正**:通过调试发现输入函数返回的是字符串类型,需要将其转换为整数类型才能正确计算。
55 32
|
10天前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 &quot;hello world!&quot; 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
21 4
|
1月前
|
数据库 Python
[oeasy]python066_如何捕获多个异常_try_否则_else_exception
本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括: 1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。 2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。 3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理
53 24
|
20天前
|
人工智能 数据库 开发者
[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally
介绍了 Python 中 `try` 语句的完全体,包括 `try`、`except`、`else` 和 `finally` 子句的使用。通过实例展示了如何捕获异常并输出详细的错误信息,如文件名和行号。特别强调了 `finally` 子句的作用,无论是否发生异常,`finally` 都会执行,常用于清理操作。最后总结了 `try` 语句的四个部分及其应用场景,并简要提及了 Python 社区的决策机制。 #try #except #else #finally
23 1
|
1月前
|
数据库连接 开发者 Python
Python中的异常处理
本文深入探讨了Python中的异常处理机制,包括异常的捕获、处理、抛出及最佳实践。通过try-except语句块,程序可以在运行时处理错误,增强健壮性和可维护性。文章还介绍了自定义异常类的创建与使用,并提供了代码示例和详细的语法说明。最后,总结了异常处理的最佳实践,如精确捕获异常、提供有用错误信息等,帮助开发者编写更可靠的代码。
82 14
|
2月前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
50 10
|
4月前
|
测试技术 开发者 Python
对于Python中的异常要如何处理,raise关键字你真的了解吗?一篇文章带你从头了解
`raise`关键字在Python中用于显式引发异常,允许开发者在检测到错误条件时中断程序流程,并通过异常处理机制(如try-except块)接管控制。`raise`后可跟异常类型、异常对象及错误信息,适用于验证输入、处理错误、自定义异常、重新引发异常及测试等场景。例如,`raise ValueError(&quot;Invalid input&quot;)`用于验证输入数据,若不符合预期则引发异常,确保数据准确并提供清晰错误信息。此外,通过自定义异常类,可以针对特定错误情况提供更具体的信息,增强代码的健壮性和可维护性。
|
4月前
|
Python
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
102 5
|
4月前
|
Python
在Python中,自定义函数可以抛出自定义异常
在Python中,自定义函数可以抛出自定义异常
90 5
|
4月前
|
存储 开发者 Python
自定义Python的异常
自定义Python的异常
44 5

热门文章

最新文章