Python异常

目标:

  • 异常的概念
  • 捕获异常
  • 异常传递
  • 自定义异常

1.异常的概念

  • 在程序运行时,如果Python解释器遇到一个错误,会停止程序的执行,并提示一些错误信息,这就是异常
  • 程序停止执行并提示错误消息的操作通常称为异常
    [En]

    the action that the program stops execution and prompts an error message is usually called an exception*

  • 程序在开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性

python中的异常:

  • TypeError : 不同类型间的无效操作
  • 不同类型的数据进行运算操作时,会引发TypeError异常
  • 下述信息表明,”str”型数据不能直接与”int”型数据进行比较
birth = input("birth")if birth < 2000:    print("00前")else:    print("00后")

Python异常
  • ZeroDivisionError : 除数为0
  • 当除数为0时,会引发ZeroDivisionError异常
  • 下述信息表明,除数不能为0
print(1/0)

Python异常
* NameError :
– 尝试访问一个未声明的变量时,会引发NameError异常
– 下述信息表明,解释器在任何命名空间里都没找到变量b
a = 1
c = a+b
print(c)

Python异常
* SyntaxError :
当解释器发现语法错误时,会引发SynataxError异常
– 下述示例中,由于for循环的后面缺少冒号,所以导致程序出现如下错误信息
list_1 = [1,2,3,4]
for i in list_1
    print(i)

Python异常
* IndentationError :
– Python最具特色的就时依靠代码块的缩进来体现代码之间的逻辑关系,当缩进错误时,会引发IndentationError( 缩进错误)异常
– 下述示例中,由于for循环语句块没有缩进,所以导致程序出现如下错误信息:
list_1 = [1,2,3,4]
for i in list_1:
print(i)

Python异常
* IndexError :
– 当使用序列中不存在的索引时,会引发IndexError( 索引超出序列的范围)异常
– 下述示例表明,列表的索引值超出了列表的范围
list_1 = [1,2,3,4]
print(list_1[4])

Python异常
* KeyError :
– 当使用字典中不存在的键时,会引发KeyError( 字典中查找一个不存在的关键字)异常
– 下述信息表明,使用了字典中没有的键
dict_1 = {
    "one":1,
    "two":2
}
print(dict_1["one"])
print(dict_1["three"])

Python异常
* ValueError :
– 当传给函数的参数类型不正确时,会引发ValueError(传入无效参数)异常
– 下述信息表明,int()函数传入了无效的字符串型参数
a = int("b")

Python异常
* FileNotFoundError :
– 当试图用只读方式打开一个不存在的文件时,会引发FileNotFoundError (python3.2以前是 IOError) 异常
– 下述信息表名,没有找到名为”1.txt”的文件或目录
file = open("1.txt")

Python异常
* AttributeError :
* 当尝试访问未知的对象属性时,会引发AttributeError(尝试访问未知的对象属性)异常
* 上述信息表明,在Car类中没有定义name属性,所以访问name属性时出现异常
class Car():
    color = "black"

car = Car()
print(car.color)
print(car.name)

Python异常

2.捕获异常

2.1简单的捕获异常的语法

  • 在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来捕获异常
  • 捕获异常最简单的语法格式:
    [En]

    the simplest syntax format for catching exceptions:*

    *

try:    尝试执行的代码except:    出现错误的处理
  • try 尝试,下方编写要尝试的代码,不确定是否能够正常执行的代码
  • except 如果不是,下方编写尝试失败的代码

简单异常捕获演练-要求用户输入一个整数

[En]

Simple exception capture walkthrough-requires the user to enter an integer

  • Python异常Python异常
1 #简单的捕获异常
 2 try:
 3     a = int(input("请输入一个整数"))
 4 except:
 5     print("请输入一个正确的整数")
 6 print("*"*30)
 7 """
 8 运行结果:
 9 请输入一个整数5
10 ******************************
11
12 请输入一个整数abc
13 请输入一个正确的整数
14 ******************************
15
16 """

View Code

2.2错误类型捕获

  • 程序执行过程中可能会遇到不同类型的异常,需要对不同类型的异常做出不同的响应,因此需要捕获错误类型。
    [En]

    different types of exceptions may be encountered during program execution, and different responses need to be made for different types of exceptions, so it is necessary to catch error types.*

  • 语法如下:
try:    #尝试执行的代码    passexcept 错误类型1:    #针对错误类型1,对应的处理代码    passexcept 错误类型2:    #针对错误类型2,对应的处理代码    passexcept Exception as result:    print("未知错误%s" % result)
  • 当Python解释器抛出异常时,最后一行错误信息的第一个单词,就是错误类型
  • 异常演练:
  • 需求:
    1. 提示用户输入一个整数
    2. 使用8除以用户输入的整数并输出
  • Python异常Python异常
1 try:2     num = int(input("请输入一个整数,且不能为0:"))3     a = 8 / num4     print(a)5 except ValueError:6     print("请输入正确的整数")7 except ZeroDivisionError:8     print("不能输入0")

View Code
* 捕获未知错误
– 在开发时,要预判到所有可能出现的错误,还是有一定难度的
– 如果希望程序,无论出现任何错误,都不会因为Python解释器抛出异常为终止,可以在增加一个except Exception as result
+ 演示:假如没有考虑到除以0这种情况
+

Python异常Python异常
1 try:
 2     num = int(input("请输入一个整数,且不能为0:"))
 3     a = 8 / num
 4     print(a)
 5 except ValueError:
 6     print("请输入正确的整数")
 7 except Exception as result:
 8     print("未知错误%s" % result)
 9 """
10 运行结果:
11 请输入一个整数,且不能为0:0
12 未知错误division by zero
13 """

View Code

2.3异常捕获完整语法

  • 在实际开发中,为了处理复杂的异常情况,完整的异常语法如下:
    [En]

    in actual development, in order to handle complex exception cases, the complete exception syntax is as follows:*

try:    #尝试执行的代码    passexcept 错误类型1:    #针对错误类型1,对应的处理代码    passexcept 错误类型2:    #针对错误类型2,对应的处理代码    passexcept (错误类型3,错误类型4):    #针对 错误类型3 和 错误类型4 对应的处理代码    passexcept Exception as result:    print("未知错误%s" % result)else:    #没有异常才会执行的代码    passfinally:    #无论是否有异常,都会执行的代码    print("无论是否有异常,都会执行的代码")
  • else 只有在没有异常时,才会执行的代码
  • finally 无论是否有异常,都会执行的代码

3.异常的传递

  • 异常的传递——当函数/方法执行出现异常,会将异常传递给 函数/方法的 调用一方
  • 如果 传递到主程序 任然 没有异常处理,程序才会被终止
1 #异常的传递性 2 def fun1(): 3     return int(input("请输入一个整数")) 4 5 def fun2(): 6     fun1() 7 8 fun2() 910 """11 请输入一个整数a12 Traceback (most recent call last):13   File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 8, in14     fun2()15   File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 6, in fun216     fun1()17   File "D:\python_DM\venv\jiaoxue\异常\异常.py", line 3, in fun118     return int(input("请输入一个整数"))19 ValueError: invalid literal for int() with base 10: 'a'20  传递顺序:3 - > 6 --> 82122 """
  • 提示:
  • 在开发中,可以在主函数中增加 异常捕获
  • 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中
  • 这样就不需要在代码中增加大量的 异常捕获,能够保证代码的整洁
  • 代码演示:
    +
def fun1():    return int(input("请输入一个整数"))def fun2():    fun1()try:    fun2()except Exception as result:    print("未知错误%s"%result)"""运行结果:请输入一个整数a未知错误invalid literal for int() with base 10: 'a'"""

4.抛出raise异常

4.1应用场景

  • 在开发中,除了 代码执行错误 Python 解释器 抛出异常之外
  • 还可以根据 应用程序 特有的业务需求 主动抛出异常

示例:

  • 提示用户 输入密码,如果 长度少于8,抛出异常

4.2抛出异常

  • Python中提供一个Exception异常类
  • 在开发过程中,如果您想在满足特定业务需求时抛出异常,您可以:
    [En]

    during development, if you want to throw an exception when meeting specific business requirements, you can:*

  • 创建 Exception 的对象
  • 使用 raise关键字 抛出异常
  • 需求:
  • 定义一个input_password函数,提示用户输入密码
  • 如果用户输入的密码长度
  • Python异常Python异常
1 #抛出异常 2 def input_password(): 3     #提示用户输入密码 4     pwd = input("请输入密码") 5     #判断密码长度是否>=8,如果大于返回用户输入的密码 6     if len(pwd) >= 8: 7         return pwd 8     #如果 9     #创建异常对象,可以使用错误信息字符串作为参数10     ec = Exception("密码长度不够")11     #主动抛出异常12     raise ec1314 try:15     print(input_password())16 except Exception as result:17     print(result)1819 """20 运行结果1:21 请输入密码12345622 密码长度不够2324 运行结果2:25 请输入密码12345679826 12345679827 """

抛出异常
*

Python异常Python异常
-*- coding:utf8 -*-
实现判断用户输入的密码长度是否正确 a>=8
def input_password():
    password = input("请输入您的密码").strip()
    if len(password) >= 8:
        return password
    else:
        raise  FjfException("密码长度不够8位")

自定义判断密码长度异常
class FjfException(Exception):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return "出现了%s的异常" % self.msg

try:
    input_password()
    print("登录成功")
except FjfException as e:
    print(e)

抛出异常代码优化

5.assert语句

assert语句又称为 断言 ,断言表示为一些逻辑表达式,程序员相信,在程序中的某个特定点该表达式值为真,如果为假,就会触发AssertionError异常。assert语句的基本语法格式如下:

assert 逻辑表达式 [,参数]

逻辑上等同于:

if not 逻辑表达式:
    raise AssertionError(参数)

例如:

a = 3
assert a>5, 'a的值应该大于5'#如果a >= 6 程序就不会报错

Python异常

assert语句用来收集用户定义的约束条件,而不是捕获内在的程序设计错误。

Original: https://www.cnblogs.com/fjfsu/p/15468013.html
Author: J.FengS
Title: Python异常

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/510958/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 用Python生成Hilbert矩阵

    代码放在了最后,前面是解题思路 目录 1.什么是Hilbert矩阵矩阵: 2.找规律 1.第一种思路:先从值出发(找规律) 2.第二种思路:先从下标索引出发(找规律) 三、代码展示…

    Python 2023年8月27日
    063
  • scrapy简介

    ·什么是scrapy框架?scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其是一个半成品,能帮用户…

    Python 2023年10月2日
    040
  • Python代码阅读(第31篇):将一个列表分割成指定大小的小列表

    本篇阅读的代码实现了将列表分割成指定大小的小列表的功能。最后一个小列表的长度由实际剩余的项而定。 本篇阅读的代码片段来自于30-seconds-of-python。 Python …

    Python 2023年5月25日
    077
  • QQ注册界面仿写(HTML+CSS+JS)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。🍎个人主页:Java Fans的博客🍊个人信条:不迁怒,不贰过。小知识,大智慧。💞当前专栏:前端案例分享专栏✨特色专栏…

    Python 2023年10月8日
    080
  • 深度学习之初始化、正则化、梯度校验

    声明 本文参考【中文】【吴恩达课后编程作业】Course 2 – 改善深层神经网络 – 第一周作业(1&2&3)_何宽的博客-CSDN博客,…

    Python 2023年10月25日
    060
  • 对标 VS Code,JetBrains 的下一代 IDE:Fleet

    昨天 (11月29日), JetBrains 网站上出现了一个全新的 IDE — Fleet 它是谁呢?这软件的风格,怎么看都不像 JB 的亲儿子。。 不过,我很负责任…

    Python 2023年6月6日
    0135
  • conda 安装pytorch

    配置:win 10或Ubuntu 下都通用 , 假设 python=3.6pytorch cuda torchvision 三个版本需要匹配的,对于pytorch 和torchvi…

    Python 2023年9月8日
    090
  • 飞机大战小游戏源码—飞机大战初体验

    开发环境: Windows10,pycharm,python3 源码使用教程: 打开pycharm,创建一个新的项目,文件–>新建项目 项目命名:飞机大战初体验,…

    Python 2023年9月19日
    057
  • vulnhub靶场之CONTAINME: 1

    准备: 攻击机:虚拟机kali、本机win10。 靶机:CONTAINME: 1,下载地址:https://download.vulnhub.com/containme/THM-C…

    Python 2023年10月13日
    055
  • Pandas系列(三):数据清洗

    Pandas系列目录 文章目录 一、 简介 二、 思维导图 三、 Pandas数据清洗 * 1. 空值、缺失值处理 – 1.1 空值、缺失值判断 1.2 空值处理 2….

    Python 2023年8月8日
    085
  • p10.第一章 Python基础入门 — 习题详解(十)

    1.3.4.3 打印下图菱形 * *** ***** ******* ***** *** * 思路1:前置空格 行号 i 星个数 前空格数 后空格数 总空格数 1 -3 1 3 3…

    Python 2023年9月29日
    038
  • 【Python】发送微信公众号消息(附完整代码)一一CSDN21天学习挑战赛

    目录 一、微信公众号注册 * 注册测试号 获取账号信息 新增消息模板 二、代码实现 * 新建access_token.py文件 新建send_message.py文件 新建main…

    Python 2023年6月11日
    065
  • 使用frp进行内网穿透:请求内网服务器的服务

    当在外网需要对内网的接口请求服务的时候需要进行内网穿透,可以选择frp这样的工具进行转发。frp分为服务端和客户端,服务端是一个外网可以访问的服务器,客户端是需要转发的服务器。 首…

    Python 2023年8月14日
    042
  • linux下conda使用教程

    1.验证conda是否已经安装并在系统上运行 conda –version 2.将conda更新到当前版本 conda update condaProceed ([y]…

    Python 2023年9月8日
    098
  • TCN代码详解-Torch (误导纠正)

    TCN代码详解-Torch (误导纠正) 1. 绪论 TCN网络由Shaojie Bai, J. Zico Kolter, Vladlen Koltun 三人于2018提出。对于序…

    Python 2023年10月14日
    0135
  • Uniapp实现实时音视频的基础美颜滤镜功能

    视频基础美颜功能简介 ZEGO 音视频SDK提供基础美颜功能,为用户呈现出良好的肌肤状态,打造独特自然的美颜效果。美颜滤镜功能常用于视频通话、直播等场景。 开发者可以开启美颜开关,…

    Python 2023年10月25日
    052
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球