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异常,并打印出相应的错误信息。

相关文章
|
7天前
|
运维 监控 API
Python进行异常处理
【6月更文挑战第14天】 ```markdown # Python异常处理与日志记录最佳实践概览 - 异常处理:确保程序稳定,改善用户体验,简化调试。 - `try-except`用于捕获异常,`except`针对具体异常类型,`else`处理无异常情况,`finally`确保资源释放。 - 日志记录:追踪执行,辅助诊断,监控分析。 - `logging`模块用于记录不同级别的日志,如`info`、`warning`、`error`。
18 6
Python进行异常处理
|
4天前
|
Python
`try-except-finally`是Python异常处理的关键字,用于优雅地处理错误
【6月更文挑战第22天】`try-except-finally`是Python异常处理的关键字,用于优雅地处理错误。示例展示了函数`divide_numbers(a, b)`尝试执行`a/b`,若出现`ZeroDivisionError`,则捕获异常并打印错误信息,最后不论是否异常,都会显示&quot;Division operation completed.&quot;。调用该函数分别展示正常除法和除零错误的处理情况。
11 2
|
4天前
|
Python
Python的异常处理通过`try-except`来实现,允许捕获和处理错误
【6月更文挑战第22天】Python的异常处理通过`try-except`来实现,允许捕获和处理错误。
24 1
|
7天前
|
数据库连接 数据库 索引
Python教程:一文了解Python的异常处理知识
在编程中,异常(exception)是指在程序执行过程中出现的错误或意外情况。当发生异常时,程序会中断执行,并将控制权转移到异常处理代码,以便对异常进行捕获和处理。
31 3
|
13天前
|
Python
Python基础教程(第3版)中文版 第8章 异常(笔记)
Python基础教程(第3版)中文版 第8章 异常(笔记)
|
7天前
|
编译器 索引 Python
Python常见异常类型说明及触发代码示例
开发过程中需要根据具体情况选择处理异常,并使用try-except语句来捕获并处理异常,从而保证程序的健壮性和稳定性。在Python中,异常是程序执行期间发生的错误或意外情况。当解释器遇到异常时,会停止程序的正常执行,并在控制台输出异常的相关信息。Python中有许多不同的异常类型,每个异常类型表示不同的错误或意外情况。OSError:操作系统产生的异常(例如打开一个不存在的文件)。AttributeError:尝试访问一个对象没有的属性。UnicodeError:Unicode相关的异常。
13 5
|
5天前
|
定位技术 Python
Python的try、except异常处理模块使用方法
所以,我们就解决了由于可能具有的arcpy.ExecuteError异常而导致的程序中断问题;大家在实际使用时,按照自己程序中可能出现的报错类,对本文出现的arcpy.ExecuteError异常类加以修改即可。
|
8天前
|
开发者 Python
Python基础第八篇(Python异常处理,模块与包)
Python基础第八篇(Python异常处理,模块与包)
|
9天前
|
分布式计算 DataWorks 调度
阿里云DataWorks-部署自定义python项目问题
阿里云DataWorks-多种方式部署自定义python项目并进行调度