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中,通常使用print()函数进行输出。在默认情况下,每一次调用print()函数都会自动换行,可以通过以下两种方式来让输出不换行: 方法一:使用end参数 print()函数中的关键字参数end用于指定输出后的字符,默认为换行符\n,我们可以将其修改为空白字符(space),从而让输出不换行。下面是一个简单的例子: print("这…

    python 2023年6月5日
    00
  • Python下载的11种姿势(小结)

    Python下载的11种姿势(小结) Python作为一门开源的高级编程语言,具有简单易上手且功能强大的特点,因而广受欢迎。同时,为了方便大家使用Python,也出现了很多下载Python的方式。本文将汇总11种常见的Python下载姿势,包括: 通过官网下载Python安装文件 使用Anaconda进行Python的下载和管理 使用Python环境管理器p…

    python 2023年5月14日
    00
  • 常用的正则表达式集锦

    以下是“常用的正则表达式集锦”的完整攻略: 一、问题描述 在文本处理中,正则表达式是一种非常强大的工具。本文将详细讲解常用的正则表达式集锦,并提供两个示例说明。 二、解决方案 2.1 常用的正则表达式 以下是常用的正则表达式集锦: 匹配数字:\d 匹配非数字:\D 匹配字母或数字:\w 匹配非字母或数字:\W 匹配空格:\s 匹配非空格:\S 匹配任意字符:…

    python 2023年5月14日
    00
  • Ubuntu 18.04 上 Python 的 os.system 和 subprocess.check_output 中莫名其妙的 shell 命令取消转义行为

    【问题标题】:Inexplicable shell command un-escaping behavior in Python’s os.system and subprocess.check_output on Ubuntu 18.04Ubuntu 18.04 上 Python 的 os.system 和 subprocess.check_output …

    Python开发 2023年4月8日
    00
  • Python中的一些陷阱与技巧小结

    Python中的一些陷阱与技巧小结 Python是一种非常受欢迎的编程语言,但是在实际开发中,我们也会遇到一些陷阱和技巧。本文将介绍一些常见的陷阱和技巧,希望能够帮助大家更好的使用Python。 1. Python中的缺省值陷阱 在Python中,使用is和is not来判断两个变量是否相等时需要注意一个细节。下面的例子展示了这个问题: a = None b…

    python 2023年5月13日
    00
  • Python eval函数介绍及用法

    Python eval函数介绍及用法 eval()函数是Python内置的一个函数,它可以将字符串str当成有效的表达式来求值并返回计算结果。eval()函数可以理解为一个将字符串转换为可执行表达式的工具。下面我们来详细介绍一下Python eval函数的用法及相关示例。 eval函数用法 eval函数的语法格式如下: eval(expression, gl…

    python 2023年6月3日
    00
  • python程序中调用其他程序的实现

    在Python中,可以通过调用其他程序,实现代码复用和功能扩展。本文将详细介绍Python程序中调用其他程序的实现方式和步骤。 准备工作 在介绍如何调用其他程序之前,需要先了解以下两个知识点: 命令行接口(CLI) 在Linux和Mac系统中,可以通过终端或命令行窗口执行多个命令。在这种环境中,每个命令都是一个可执行的程序,可以实现特定功能。这种以命令行为基…

    python 2023年5月31日
    00
  • python感知机实现代码

    接下来将为大家详细讲解“Python感知机实现代码”的完整攻略。 什么是感知机 感知机是二元线性分类模型,输入是向量,输出是标志所属的二元分类,常用于二元分类、多元分类和回归分析等领域。 感知机实现代码攻略 实现步骤 以下是Python实现感知机分类的步骤: 定义感知机模型的输入与输出维度。 定义感知机模型的参数:权重向量和偏置。 进行前向传播,计算感知机模…

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