16异常处理

yizhihongxing

异常处理

异常

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
  • 一般情况下,在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如何识别银行卡卡号呢?以下是一个完整的实例教程: 1. 安装 PyPI 中的银行卡号校验库 PyPI中有很多可以用于银行卡号校验的库,比如 bankcardvalidator,我们首先…

    python 2023年5月13日
    00
  • 如何在Python中创建频率表

    在Python中创建频率表可以通过使用字典(dictionary)来实现,以下是具体步骤: 读取数据并将其存储在列表中。假设我们要分析的数据包含在一个名为data的列表中。 创建一个新的字典用于存储频率数据。我们可以使用collections模块中的defaultdict函数来创建一个在访问不存在键时默认返回0的字典。 from collections im…

    python-answer 2023年3月25日
    00
  • 分享python 写 csv 文件的两种方法

    下面是分享Python写CSV文件的两种方法的攻略: 方法1:使用csv模块写入CSV文件 导入csv模块 import csv 创建CSV文件 假设我们要写入一个名为“data.csv”的CSV文件,我们可以通过以下代码创建它: with open(‘data.csv’, mode=’w’, newline=”) as csv_file: writer …

    python 2023年5月18日
    00
  • Python使用django框架实现多人在线匿名聊天的小程序

    下面是详细的攻略: 1. 安装和配置 django 在开始编写聊天应用程序前,需要先安装和配置 django。在命令行中执行以下命令安装 django: pip install django 安装完成后,可以通过以下命令创建一个新的 django 项目: django-admin startproject project_name 其中 project_na…

    python 2023年5月23日
    00
  • python之随机数函数的实现示例

    下面是详细讲解“python之随机数函数的实现示例”的完整攻略。 简介 随机数在计算机程序中经常用到,Python 也提供了内置的随机数模块 random,它包含了多个生成随机数的函数,本文将通过实例演示 random 模块的使用。 random 模块示例 生成随机整数 可以使用 randint() 方法生成一个指定范围内的随机整数: import rand…

    python 2023年6月3日
    00
  • Python学习之字典的常用方法总结

    Python学习之字典的常用方法总结 什么是字典 字典(dictionary)是 Python 中非常重要的数据类型之一,可以将键(key)和值(value)一一映射。字典使用花括号{}表示,键和值之间使用冒号:分隔,不同的键值对使用逗号,分隔。例如: mydict = {‘name’: ‘小明’, ‘age’: 18, ‘gender’: ‘男’} 下面来…

    python 2023年5月13日
    00
  • Python3安装pip工具的详细步骤

    下面是Python3安装pip工具的详细步骤: 步骤一:确认Python3环境已经安装 如果已经安装了Python3环境,可以直接跳过这一步。如果没有安装,可以根据操作系统的不同,选择适合自己的安装包进行安装。 步骤二:下载pip安装文件 根据您的操作系统下载对应版本的pip安装文件。可以从pip官方下载站点上下载相应版本的pip工具的安装文件。例如,如果您…

    python 2023年5月14日
    00
  • python的变量和运算符你都知道多少

    Python是一门广泛使用的编程语言,其中变量和运算符是编程的基础,让我们一起了解一下Python变量和运算符的基本内容吧。 1. 变量 变量是用于存储数据的标识符。在Python中,变量名可以由字母、数字和下划线组成,但第一个字符必须是字母或下划线。变量名是大小写敏感的。 1.1 变量赋值 Python中的变量赋值非常简单,可以将一个值赋给变量。在Pyth…

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