16异常处理

异常处理

异常

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。
  • 异常是Python对象,表示一个错误。
  • 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

捕获异常

异常类型捕获

# 捕获常规异常
try:
    可能发生错误的代码
except:
    如果出行异常执行的代码

# 捕获指定异常
try:
    可能发生错误的代码
except NameError as e:  # e = 当前异常对象 
    如果出行异常执行的代码
    
# 捕获多个异常
try:
    可能发生错误的代码
except(NameError, ZeroDisvisionError):
    如果出行异常执行的代码
    
# 捕获全部异常(捕获常规异常也可以)
try:
    可能发生错误的代码
except Exception as e:  # e = 当前异常对象 
    如果出行异常执行的代码

常见异常类型

异常名称 描述
AttributeError 对象没有这个属性
OSError 操作系统错误
ImportError 导入模块/对象失败
IndexError 序列中没有此索引(index)
KeyError 没有这个键
NameError 未声明/初始化对象 (没有属性)
SyntaxError Python 语法错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
Warning 警告的基类

try-except-else

  • 如果抛出异常执行except内部代码
  • 如果程序正常执行else内部代码
# else异常
try:
    print(1)
except Exception as e:
    print(e)
else:
    print("我是else,是没有异常的时候执行的代码")

try-except-finally

不管程序有无发生异常,都将执行finally内部代码。

# 异常的Finally(无论是否有异常,都要执行的代码)
try:
    f = open("test.txt",'r')
except Exception as e:
    f = open("test.txt",'w')
else:
    print("未出现异常")
finally:
    f.close()

注意:else和Finally可写可不写

主动触发异常

  • 在实际开发中,在程序不满足某条件时,通常会主动抛出异常。
  • 语法:raise Exception()
# 判断煎饼熟了没,当烹饪时间小于5时,则主动触发没熟异常;否则熟了。
def test(level):
    if level<5:
        raise Exception("没熟没熟")

try:
    test(4)
except Exception as e:
    print(e)
else:
    print("熟了 请吃") 

自定义异常

  • 当需要自定义满足一些规则时,就可以自定义异常。
  • 自定义异常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现。
# 判断密码长度  如果密码长度小于6 主动触发异常 并抛出异常信息(打印提示)
class ShortInputError(Exception):
    # 初始化方法
    def __init__(self, lenght, min_lenght):
        self.lenght = lenght
        self.min_lenght = min_lenght

    def __str__(self):
        return f"你输入的密码长度为{self.lenght},不能低于{self.min_lenght}"

def fun():
    try:
        password = input("请输入你的密码:")
        if len(password) < 6:
            raise ShortInputError(len(password), 6)  # 主动触发异常  并返回提示信息
    except Exception as e:
        print(e)
    else:
        print("密码已正确输入!")

fun()

断言

  • assert断言用于判断一个表达式,当表达式条件为False时触发断言异常AssertionError。
  • 注意:断言用于强制用户服从,可捕获,但是一般不捕获。
  • 语法:assert 表达式,返回数据
print("*" * 20)
if  2 == 2:
    raise AssertionError
print("*" * 20)
"""
print("*" * 20)该语句并不会执行,条件满足,触发了断言,后面的语句都不会再执行
"""

print("*" * 20)
if  2 == 2:
    # 捕获断言
    try:
        raise AssertionError
    except Exception as e:
        # 类的对象实例调用__class__属性时会指向该实例对应的类,而后再调用 __name__ 就会输出该实例对应的类的类名
        print(e.__class__.__name__)
print("*" * 20)
try:
    n = input("请输入一个数字:")
    assert n.isdigit(), "只能输入数字"  # assert 表达式,返回数据
    print("你输入的是:", n)
except Exception as ex:
    print("发现错误:", ex)
    
"""
请输入一个数字:s
发现错误: 只能输入数字
"""

原文链接:https://www.cnblogs.com/daguo118/p/17355676.html

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

(0)
上一篇 2023年4月27日
下一篇 2023年4月27日

相关文章

  • 遗传算法之Python实现代码

    下面是详细讲解“遗传算法之Python实现代码”的完整攻略。 遗传算法 遗传算法是一种基于自然选择和遗传学原理的优算法,可以用于解决许多优化问题。其基本思想是通过模拟自然界中的进化过程,不断从种群中选择优秀的个体,并通过交叉和变异操作产生新的个体,最终得到最优解。 下面是一个Python实现遗传算法的示例: import random def fitness…

    python 2023年5月14日
    00
  • python redis连接 有序集合去重的代码

    Python是一种高级语言,具有简单易读、易学习、易上手快等特点,且开发效率高,广泛应用于数据处理、Web开发、机器学习等领域的应用。而Redis则是一个高性能的键值对存储系统,具有高效、稳定、可靠等特点,被广泛用于分布式、缓存、消息队列等场景。 Python中用于连接Redis的模块主要是redis-py,这个模块提供了方便的Redis访问方法,可轻松使用…

    python 2023年5月14日
    00
  • 聊聊Python对CSV文件的读取与写入问题

    让我们来聊聊Python对CSV文件的读取与写入问题吧! 什么是CSV文件? CSV是Comma Separated Values(逗号分隔值)的缩写,是一种常用的数据存储格式,在Excel、Google Sheet等软件中也支持导出和导入CSV文件。CSV文件的一行代表一条记录,每个字段通过逗号分隔。 Python如何读取CSV文件? Python中可使用…

    python 2023年6月3日
    00
  • Python基础详解之邮件处理

    Python基础详解之邮件处理 简介 本篇文章主要介绍如何使用Python处理邮件,包括邮件的发送和接收,以及邮件的解析和处理。为了更好地理解,我们将分别从三个方面来阐述: 发送邮件 接收邮件 解析和处理邮件 发送邮件 发送邮件是指通过Python向收件人发送邮件的过程。Python中有多种发送邮件的方式,此处我们介绍使用smtplib库实现发送邮件。 示例…

    python 2023年6月5日
    00
  • BeautifulSoup中find和find_all的使用详解

    在本攻略中,我们将介绍BeautifulSoup中find和find_all的使用方法。以下是一个完整攻略,包括两个示例。 find和find_all的区别 在使用BeautifulSoup解析HTML页面时,我们经常需要查找特定的标签或标签组。find和find_all是两个常用的方法,用于查找标签或标签组。 find方法用于查找第一个符合条件的标签,而f…

    python 2023年5月15日
    00
  • Python处理文件的方法(mimetypes和chardet)

    Python 处理文件的方法: mimetypes 和 chardet mimetypes mimetypes 是 Python 标准库中用于处理 mime 类型的模块。它可以根据文件扩展名获取文件的 mime 类型,也可以反过来根据 mime 类型获取对应的扩展名。 获取文件的 mime 类型 我们可以使用 mimetypes.guess_type() 函…

    python 2023年6月5日
    00
  • python工具快速为音视频自动生成字幕(使用说明)

    Python工具快速为音视频自动生成字幕(使用说明) 在本文中,我们将介绍使用Python工具快速为音视频自动生成字幕的步骤和注意事项。 1. 安装工具和依赖 在使用Python工具自动生成字幕之前,需要安装以下依赖包和工具: FFmpeg: FFmpeg是一款用于处理多媒体文件的工具。它可以用于解码和编码各种视频、音频格式,并且支持转换和流媒体处理。在安装…

    python 2023年5月19日
    00
  • Python+Selenium实现自动填写问卷

    Python+Selenium实现自动填写问卷攻略 1. 概述 自动填写问卷是一种自动化测试方法,可以模拟真实用户在网站/应用中的操作,提高测试效率、降低测试成本。本文将介绍如何使用Python+Selenium实现自动填写问卷。 2. 准备 在开始之前,需要安装以下软件: Python 3.6或以上版本 Chrome浏览器 ChromeDriver驱动程序…

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