Day24笔记-异常和错误

一、异常和错误

1.概念

​ Python有两种错误很容易辨认:语法错误和异常

​ Python 的语法错误或者称之为解析错误,是初学者经常碰到的,比如缺少冒号等

​ 在程序运行过程中,总会遇到各种各样的错误,有的错误是程序编写有问题造成的,这种错误我们通常称之为bug,bug是必须修复的;有的错误是用户输入造成的,这种错误可以通过检查用户输入来做相应的处理;还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了,这类错误被称为异常,在程序中通常是必须处理的,否则,程序会因为各种问题终止并退出

print('start~~~')
list1 = [4,5,7,8]
num = int(input('请输入一个数字:'))  # ValueError: invalid literal for int() with base 10: 'raqrq'
print(list1[num])   # IndexError: list index out of range
print('end~~~~~~')
​
'''
注意:a.一般情况下,当程序运行的时候出现的错误被称为异常【Exception】b.异常一般使用类表示,比如:IndexError表示索引越界的异常类【列表,元组,字符串】c.所有异常类的父类是BaseException或者Exceptiond.异常的特点:当程序运行的过程中遇到了异常,而且该异常未被处理,程序会被终止在异常的代码处,后面的代码将没有执行的机会e.在Python中,处理异常的思想:暂时跳过异常的代码,让后面的代码有执行的机会f.异常在代码中的出现按只是一种可能性
'''
2.常见异常【面试题】

AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性xIOError 输入/输出异常;基本上是无法打开文件ImportError 无法引入模块或包;基本上是路径问题或名称错误IndentationError 语法错误(的子类) ;代码没有正确对齐IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]KeyError 试图访问字典里不存在的键KeyboardInterrupt Ctrl+C被按下NameError 使用一个还未被赋予对象的变量SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)TypeError 传入对象类型与要求的不符合UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它ValueError 传入一个调用者不期望的值,即使值的类型是正确的

# 【面试题】请列举Python常见的异常,至少5种
​
# 1.NameError 使用一个还未被赋予对象的变量
# print(num)   # NameError: name 'num' is not defined
​
# 2.ValueError 传入一个调用者不期望的值,即使值的类型是正确的
# num = int(input('请输入一个数字:'))   # ValueError: invalid literal for int() with base 10: 'agAG'
​
# 3.TypeError 传入对象类型与要求的不符合
# print('faf' + 19)   # TypeError: can only concatenate str (not "int") to str
# print(19 + 'fagg')    # TypeError: unsupported operand type(s) for +: 'int' and 'str'
​
# 4.AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
# print('abc'.reverse())   # AttributeError: 'str' object has no attribute 'reverse'
# class Person():
#     def __init__(self,name,score):
#         self.name = name
#         self.score = score
# p = Person('小明',10)
# print(p.scope)
​
# 5.UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
# a = 10
# def func():
#     a += 1    # UnboundLocalError: local variable 'a' referenced before assignment
# func()
# print(a)
​
# def func1():
#     num = 10
#     def func2():
#         print(num)  # UnboundLocalError: local variable 'num' referenced before assignment
#         num = 20
#     func2()
# func1()
​
# 6.MoudleNotFoundError:导入模块的时候,路径有误
# import  aaaa    # ModuleNotFoundError: No module named 'aaaa'
​
# 7.FileNotFoundError:文件路径不存在
# f = open(r'file.txt','r',encoding='utf-8')  # FileNotFoundError: [Errno 2] No such file or directory: 'file.txt'
​
# 8.KeyError 试图访问字典里不存在的键
# dic = {'a':10}
# print(dic['b'])   # KeyError: 'b'
3.异常处理方式

处理异常的本质:没有从根本上解决问题【修改代码】,只是将异常忽略,可以让后面的代码继续执行

3.1try-except-finally/else捕获【重点掌握】
'''
根据具体的需求,try-except-finally/else有不同的书写形式a.try-except                *****b.try-excpet-elsec.try-except-finally        *****d.try-finallye.try-except-except......
'''
​
'''
try:代码1
except 异常码  as e:代码2
finally:代码3注意:a.将可能存在异常的代码书写在 【代码1】处,监测起来b.如果【代码1】出现异常,肯定会匹配执行相应的【代码2】,如果【代码1】没有异常,则所有的except会被跳过c.不管【代码1】是否有异常,【代码3】永远都会执行d.except出现一次,且明确了异常码,则只能处理一种异常e.当try中的代码出现异常,同样,try中的代码会终止在异常处,后面的代码无法执行
'''
​
# 1.try-except
# print('start~~~')
# try:
#     num = int(input('请输入一个数字:'))
#     print('over~~~~~~~')
# # 此处的e是一个对象,该对象对应的类是ValueError,当代码出现了异常,则异常的对象就会被自动创建出来
# except ValueError as e:  # e = ValueError()
#     # 在异常类中,已经重写了__str__,所以当输出对象的时候,不是默认的地址,而是错误描述信息
#     print(e)   # invalid literal for int() with base 10: 'wyw'
# print('end~~~~~~')
​
# # 2.try-except-except......
# '''
# a.try中如果存在多种异常,都会处理其中的一个异常
# b.类似于if的多分支,如果try中的代码出现异常,会从上往下依次匹配相应的except语句
# '''
# print('start~~~')
# try:
#     list1 = [4,5,7,8]
#     num = int(input('请输入一个数字:'))
#     print(list1[num])
# except ValueError as e:
#     print('ValueError',e)
# except IndexError as e:
#     print('IndexError',e)
# print('end~~~~~~')
​
# 3.try-except + 父类【BaseException/Exception】
# 如果try中代码不确定异常的类型,则可以直接使用父类捕获,任何类型的异常都可以捕获
# print('start~~~')
# try:
#     list1 = [4,5,7,8]
#     num = int(input('请输入一个数字:'))
#     print(list1[num])
# except Exception as e:
#     print('父类~~~',e)
#
# print('end~~~~~~')
​
​
# 4.try-except :省略异常的类型
# print('start~~~')
# try:
#     list1 = [4,5,7,8]
#     num = int(input('请输入一个数字:'))
#     print(list1[num])
# except:
#     print('出现了异常')
#
# print('end~~~~~~')
​
# # 5.try-except-else
# # try-except中的else执行的时机:只有当try中的代码没有异常的时候,else代码块才会被执行
# print('start~~~')
# try:
#     list1 = [4,5,7,8]
#     num = int(input('请输入一个数字:'))
#     print(list1[num])
# except Exception as e:
#     print('父类~~~',e)
# else:
#     print('else被执行了~~~~')
#
# print('end~~~~~~')
​
# 6.try-except-finally
# try-except中的finally执行的时机:不管try中的代码是否有异常,finally代码块都会被执行
# print('start~~~')
# try:
#     list1 = [4,5,7,8]
#     num = int(input('请输入一个数字:'))
#     print(list1[num])
# except Exception as e:
#     print('父类~~~',e)
# finally:
#     print('finally被执行了~~~~')
#
# print('end~~~~~~')
​
# 【面试题】如果函数中出现了try-except-finally,且try或except代码块中出现了return,finally语句仍然会正常执行
# def func():
#     try:
#         list1 = [4,5,7,8]
#         num = int(input('请输入一个数字:'))
#         return list1[num]
#     except Exception as e:
#         print('父类~~~',e)
#         return
#     finally:
#         print('finally被执行了~~~~')
# func()
​
# 7.函数中出现异常的捕获方式
# 方式一:在函数体中捕获
def func():try:list1 = [4,5,7,8]num = int(input('请输入一个数字:'))print(list1[num])except Exception as e:print('父类~~~',e)
func()
​
# 方式二:捕获函数的调用
def func():list1 = [4,5,7,8]num = int(input('请输入一个数字:'))print(list1[num])
​
try:func()
except Exception as e:print('父类~~~', e)
​
3.2raise抛出
'''
Python异常处理的方式:捕获和抛出
'''
​
# 1.根据具体的问题创建异常对象
# try:
#     list1 = [4,6,7,89,9]
#     print(list1[20])
# except IndexError as e:
#     print(e)
​
# 2.可以通过异常的类创建异常的对象,控制代码的执行
# 语法:raise 异常类('描述信息'),注意:raise常用于自定义异常中
print('start~~~~')
try:raise IndexError('索引越界问题')
except Exception as e:print(e)
print('end~~~~~~')
​
3.3assert断言
# assert
# 语法:assert 表达式,异常描述信息
# 工作原理:如果表达式成立,则代码正常执行,但是如果表达式不成立,则会出现AssertionError
def div(x,y):assert y != 0,'y不能为0'return x / y
r = div(3,0)
print(r)
4.自定义异常
# 为了解决实际生活中的特定场景,系统的异常类满足不了需求,则需要自定义异常
​
# 1.自定义一个类,继承自BaseException或Exception
# class CustomException(BaseException):
#     # 2.书写构造函数,在其中定义实例属性
#     def __init__(self,msg):
#         # 调用父类的构造函数,主要是为了使用异常类的机制
#         super().__init__()
#         self.msg = msg
#
#     # 3.重写__str__函数
#     def __str__(self):
#         return self.msg
#
#     # 4.定义一个实例函数,用来解决出现的问题
#     def handle(self):
#         print('问题已解决')
#
# try:
#     raise CustomException('出现了异常')
# except CustomException as e:
#     print(e)
#     e.handle()
​
# 练习:
class LateException(BaseException):def __init__(self, msg):super().__init__()self.msg = msg
​def __str__(self):return self.msg
​def handle(self):print('下次一定在八点之前起床')
hour = float(input('请输入你起床的时间:'))
try:if hour >= 8:raise LateException('上课/上班迟到了')else:print('正常上课/上班')
except LateException as e:print(e)e.handle()  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1541206.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

昂科烧录器支持ST意法半导体的电可擦除可编程存储器M95128-DFDW

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中ST意法半导体的电可擦除可编程存储器M95128-DFDW已经被昂科的通用烧录平台AP8000所支持。 M95128-DFDW是电可擦除可编程存储器(EEPROM)通过SPI总线进行…

springcloud微服务实战<1>

单机结构 我只需要一台服务器完成我项目的部署(单体应用),开发部署简单 他就会有单点问题, 因为此时只有一台机器,一旦这个机器挂了,我用户就没有办法使用应用的服务了 这个就是单点问题针对我们的项目进…

Qt/C++ 多线程同步机制详解及应用

在多线程编程中,线程之间共享资源可能会导致数据竞争和不一致的问题。因此,采用同步机制确保线程安全至关重要。在Qt/C中,常见的同步机制有:互斥锁(QMutex、std::mutex)、信号量(QSemaphore&…

多模态大模型MiniCPM-V技术学习

目前性价比最高的多模态模型 Minicpm-V-2.6参数8B,int4版本推理显存仅7GB,并且在幻觉数据集上效果好于其他模型,测试下来效果非常好,官方演示里面还给出了手机上端侧运行的图片和视频推理示例 p.s.Qwen2-VL和Minicpm-V-2.6头对头…

【操作系统】02.深入理解操作系统

一、操作系统的定位 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括操作系统内核和其他程序。 由上述的宏观图其实我们就知道:操作系统是一款进行软硬件资源管理的软件。 二、设计操作系统的目的 操…

众数信科AI智能体政务服务解决方案——寻知智能笔录系统

政务服务解决方案 寻知智能笔录方案 融合民警口供录入与笔录生成需求 2分钟内生成笔录并提醒错漏 助办案人员二次询问 提升笔录质量和效率 寻知智能笔录系统 众数信科AI智能体 产品亮点 分析、理解行业知识和校验规则 AI实时提醒用户文书需注意部分 全文校验格式、内…

C一语言—动态内存管理

目录 一、为什么要有动态内存管理 二、malloc和free (2.1)malloc (2.2)free 三、calloc和realloc (3.1)calloc (3.2)realloc 四、常见的动态内存的错误(举例均为错…

springboot每次都需要重设密码?明明在springboot的配置中设置了密码

第一步:查看当前的密码是什么? 打开redis-cli.exe,输入config get requirepass,查看当前的密码是什么? 接着,修改redis的配置文件,找到redis的安装目录,找到相关的conf文件&#x…

Amazon Bedrock 模型微调实践(二):数据准备篇

本博客内容翻译自作者于 2024 年 9 月在亚马逊云科技开发者社区发表的同名博客: “Mastering Amazon Bedrock Custom Models Fine-tuning (Part 2): Data Preparation for Fine-tuning” 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、…

Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行

1. Unity3D介绍 Unity3D是虚拟现实行业中,使用率较高的一款软件。 它有着强大的功能,是让玩家轻松创建三维视频游戏、建筑可视化、实时三维动画等互动内容的多平台、综合型 虚拟现实开发工具。是一个全面整合的专业引擎。 2. Unity安装 官网 : Unity…

1042 Shuffling Machine,1050 String Subtractio

1042 Shuffling Machine 普通模拟即可&#xff0c;注意每一次交换牌的时候需要更新start数组&#xff08;当前卡牌的顺序&#xff09;&#xff0c;并且清空ans数组&#xff08;交换后的卡牌顺序&#xff09; #include<bits/stdc.h> using namespace std; const int N 5…

hal 正点原子 exti外部中断

1.这个是 f4/f7/h7 用于配置外部中断的寄存器 需要先使能时钟 2.这个是f1用于配置外部中断的配置器&#xff0c;也是需要先配置时钟&#xff0c;但是区别在于除了f1 &#xff0c;别的系列都用的SYSCFG 3.这个是外部中断线io和怎么exti对应的 4.这两张图 都是exti和io的对应关系…

QFramework v1.0 使用指南 更新篇:20240919. 新增 BindableDictionary

虽然笔者目前还不知道 BindableDictionary 能用在什么使用场景下&#xff0c;但是还是应童鞋的要求实现了 BindableDictionary。 基本使用如下: using System.Linq; using UnityEngine;namespace QFramework.Example {public class BindableDictionaryExample : MonoBehaviou…

【设计模式】UML类图

目录 前言 一、类图概述 二、类图的作用 三、类图表示法 四、类之间关系的表示方法 1. 关联关系 1.1 单向关联 1.2 双向关联 1.3 自关联 2. 聚合关系 3. 组合关系 4. 依赖关系 5. 继承关系 6. 实现关系 总结 前言 统一建模语言&#xff08; Unified Modeling La…

ClickHouse 的第一篇 研究论文:如何让现代数据分析数据库实现超高速性能?

本文字数&#xff1a;3245&#xff1b;估计阅读时间&#xff1a;9 分钟 作者&#xff1a;ClickHouse Team 本文在公众号【ClickHouseInc】首发 我们非常激动地宣布&#xff0c;第一篇关于 ClickHouse 的研究论文【chrome-extension://mhnlakgilnojmhinhkckjpncpbhabphi/pages/p…

基于ACMEv2协议的免费SSL证书申请-支持Let‘s Encrypt/Google/ZeroSSL

项目&#xff1a;https://github.com/cook-code-jazor/acmex 非开源&#xff0c;使用webui管理证书的申请&#xff0c;所有文件本地化存储&#xff0c;支持windows/linux/osx。 证书申请直连ACMEv2服务商&#xff0c;没有任何中间接口&#xff0c;支持Lets Encrypt/Google/Ze…

Inf-MLLM:单个 4090D 实现 4M Token 长序列问答

一、背景 本文中我们简单介绍一个新的解决长序列推理效率的新方案 Inf-MLLM&#xff0c;也是基于 Token 稀疏化。有关 Token 稀疏化的方案通常可以从如下几个方面了解&#xff1a; 怎么识别关键 Token&#xff0c;包括静态识别或动态识别&#xff0c;比如 Streaming LLM 里 At…

从观《中国数据库前世今生》纪录片谈起:云数据库的未来发展与挑战

从观《中国数据库前世今生》纪录片谈起&#xff1a;云数据库的未来发展与挑战 前言 作为一名资深程序员&#xff0c;我在职业生涯中始终密切关注数据库技术的发展动态。近日&#xff0c;我观看了《中国数据库前世今生》这部纪录片&#xff0c;深受触动。这部纪录片不仅记录了…

Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot

一、Ubuntu 安装和使用 Fcitx 中文输入法 在 Ubuntu 上安装和使用 Fcitx 输入法框架是一个常见的选择&#xff0c;特别是对于需要中文输入的用户。以下是详细的步骤来安装和配置 Fcitx 输入法&#xff1a; 1. 安装 Fcitx 和相关输入法 首先&#xff0c;更新你的包列表并安装…

经济下行,这个AI美女短视频带货副业赛道,为什么不来试一试?

经济下行&#xff0c;普通人应该尽早认清一个事实&#xff0c;没有一技之长&#xff0c;没有核心竞争力&#xff0c;即便是打工皇帝&#xff0c;年入百万也只是浮云。 一定要保证主业的稳定&#xff0c;再探索新的机会&#xff0c;要多从”1-10"&#xff0c;而不是反复”…