python 异常处理总结

Python 异常处理总结

异常的概念

异常是程序运行过程中出现的一些不正常的情况,如:输入错误、读取文件失败、网络连接异常等等。

异常处理的机制

Python 通过 try...except...finally 语句来处理异常。try 语句块包含了需要观察异常的代码,如果出现异常,则会跳转到 except 语句块中,执行指定的异常处理代码。finally 语句块中是一些无论是否有异常都需要执行的代码。

异常处理的方式

1. 捕获指定类型的异常

try:
    # 尝试执行的代码
    a = 1 / 0  # ZeroDivisionError
except ZeroDivisionError:  # 捕获指定类型的异常
    # 如果出现 ZeroDivisionError 异常,则执行此处代码
    print("除数不能为0")

此处使用了 except 后面跟 ZeroDivisionError,表示只捕获 ZeroDivisionError 异常类型。

2. 捕获多个异常类型

try:
    # 尝试执行的代码
    a = int("abc")  # ValueError
    b = 1 / 0  # ZeroDivisionError
except (ValueError, ZeroDivisionError):  # 捕获多个异常类型
    # 如果出现 ValueError 或 ZeroDivisionError 异常,则执行此处代码
    print("代码有误,请检查输入")

此处使用了 except 后面跟多个异常类型的元组,表示捕获多个异常类型。

3. 捕获所有异常类型

try:
    # 尝试执行的代码
    a = int("abc")  # ValueError
    b = 1 / 0  # ZeroDivisionError
except Exception as e:  # 捕获所有异常类型,并输出异常信息
    # 如果出现任何异常,则执行此处代码
    print("出现异常:", e)

此处使用了 except 后面没有跟任何异常类型,表示捕获所有异常类型。

重要提示:如果只写一个空的 except,一旦有异常发生,程序就会一直执行,相当于没有异常处理。因此,写 except 时一定要慎重,最好指定捕获的异常类型。

4. 抛出自定义的异常

# 自定义异常类,必须继承 Exception 类
class MyException(Exception):
    pass

try:
    # 尝试执行的代码
    raise MyException("自定义异常")  # 抛出自定义异常
except MyException as e:
    # 捕获自定义的异常,并输出异常信息
    print("出现自定义异常:", e)

此处使用了 raise 关键字来抛出自定义的异常,然后使用 except 捕获自定义的异常。

异常的执行顺序

当程序执行时,遇到异常会尝试寻找与之匹配的 except,如果找到了则执行对应的异常处理代码。如果当前层次没有找到匹配的异常处理代码,则将异常“传递”给上一层级,继续寻找匹配的异常处理代码。

例如:

try:
    try:
        a = 1 / 0
    except NameError:
        print("处理 NameError 异常")
except ZeroDivisionError:
    print("处理 ZeroDivisionError 异常")

这个程序中抛出了 ZeroDivisionError 异常,但是在第一个 try 中没有找到匹配的异常处理代码,因此将异常“传递”给了第二个 try,在第二个 try 中找到了匹配的异常处理代码,最后输出 “处理 ZeroDivisionError 异常”。

示例1

# 程序当中没有捕获异常,会崩溃
a = 1 / 0

此例中,由于除数为 0,程序会抛出 ZeroDivisionError 异常,但是程序没有对其进行异常处理,因此程序执行时就会崩溃。

示例2

try:
    a = int("abc")
except ValueError:
    print("输入非数字")

此例中,程序尝试将字符串 "abc" 转换成整数,但是由于字符串无法被转换成整数,会抛出 ValueError 异常。程序使用 try...except 结构对 ValueError 异常进行了处理,输出了友好的提示信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 异常处理总结 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 利用python模拟实现POST请求提交图片的方法

    利用 Python 模拟实现 POST 请求提交图片的方法 在使用 Python 进行网络爬虫时,我们经常需要模拟 POST 请求提交图片。以下是利用 Python 模拟实现 POST 请求提交图片的方法的详细介绍。 使用 requests 模块提交图片 requests 是一个 Python 的 HTTP 客户端库,可以用来发送 HTTP 请求。我们可以使…

    python 2023年5月15日
    00
  • Python打包文件夹的方法小结(zip,tar,tar.gz等)

    下面是Python打包文件夹的方法小结。 概述 在Python中,我们可以使用多种方式来打包文件夹,比如zip、tar、tar.gz等格式。这些打包方式可以方便地将多个文件或文件夹打包成一个文件,以便于传输、备份或分发。下面介绍几种主要的打包方式。 zip格式压缩 zip是一种常见的文件压缩格式,在Python中我们可以通过zipfile模块来实现zip格式…

    python 2023年6月3日
    00
  • Python多线程使用方法详细讲解

    Python多线程使用方法详细讲解 在 Python 中,多线程可以用于许多场景,比如爬虫、并行处理等。本文将详细讲解 Python 多线程的使用,包括线程创建、启动、停止、同步等方面。 线程创建 Python 中创建线程有两种方式:函数和类。我们先看函数方式的创建。 函数方式 在 Python 中,可以使用 threading 模块的 Thread() 方…

    python 2023年5月19日
    00
  • python 中 lxml 的 etree 标签解析

    Python中lxml的etree标签解析 lxml是Python中一个高效且易于使用的XML和HTML处理库。其中,etree模块提供了一种解析XML和HTML文档的方法。本文将详细介绍如何使用lxml的etree模块解析XML和HTML文档,并提供两个示例。 步骤1:安装lxml库 在使用lxml库之前,我们需要安装它。您可以使用以下命令安装lxml库:…

    python 2023年5月15日
    00
  • 基于Python编写一个简单的端口扫描器

    下面是基于Python编写一个简单的端口扫描器的攻略: 1. 确定需要扫描的IP地址和端口范围 首先,需要确定需要扫描的IP地址和端口范围。IP地址可以是单个目标IP,也可以是一段IP地址范围。端口范围可以是单个端口,也可以是一段端口范围。这个过程可以手动输入,也可以从命令行参数读取。例如: python scan.py -t 192.168.1.1-192…

    python 2023年6月2日
    00
  • Python中json模块load/loads方法实战以及参数详解

    下面是关于“Python中json模块load/loads方法实战以及参数详解”的攻略。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它采用易于人们阅读和编写的文本格式,能够用于表示简单到复杂的数据结构。常用于将数据从服务器发送到客户端,或者将数据从一个应用程序传输到另一个应用程序。 JSON数…

    python 2023年5月13日
    00
  • Python用20行代码实现完整邮件功能

    下面我将为你详细讲解“Python用20行代码实现完整邮件功能”的完整攻略。 首先,我们需要明确一下,要实现完整邮件功能所需要用到的模块是smtplib和email。smtplib模块是发送邮件的核心,而email模块则是生成邮件内容的核心。 接下来,我们先来看一下如何使用smtplib模块来发送邮件。以下是一个常规的邮件发送代码段: import smtp…

    python 2023年6月3日
    00
  • 非常全面的Python常见基础面试题及答案

    非常全面的Python常见基础面试题及答案攻略 Python是一种高级编程语言,已经成为了数据科学、机器学习、Web发等领域的主流语言。在Python的面试中,常见的基础问题包括Python的数据类型、控制流、函数、模块、面向对象编程等方面。本文将介绍Python常见基础面试题及答案,并提供示例说明。 数据类型 1. Python中哪些基本数据类型? Pyt…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部