python第九章 异常笔记

news2024/11/28 6:38:04

和Java类似程序运行有异常的时候,服务器会采用系统默认的异常处理机制:返回信息,终止程序。

异常的类型:

常见异常类型:

1.NameError:访问了未定义的变量

2.IndexError:越界访问

3.AttributeError:访问对象不存在的属性引发的异常

4.FileNotFoundError:未找到指定文件或目录引发的异常

9.1异常捕获语句:

9.1.1 使用try-except 语句捕获异常

格式:

try:
    可能出错的代码
except [异常类型 [as error]]:     #将捕获到的异常对象赋值给errror
    捕获异常后的处理代码

except中可以指定异常类型,如果指定了异常类型,该字句就只对与指定异常类型相匹配的异常进行处理。否则处理try语句捕获的所有异常。except子句中的as关键字用于将捕获到的异常对象赋给error;

except子句后的代码是处理异常时执行的代码。

try-except 语句的执行过程为:优先执行try子句中可能执行的代码。若try子句中没有出现异常,忽略except子句继续向下执行。如果try出现异常,忽略try剩余代码,转而执行except子句。若程序出现的异常类型与except子句中指定的异常类型匹配,使用error记录信息,执行except子句中的代码,否则按系统默认的方式终止程序。

    • 捕获单个异常

#捕获单个异常
num_one=int(input("请输入被除数:"))
num_tow=int(input("请输入除数:"))
try:
    print("结果为:",num_one/num_tow)
except ZeroDivisionError:
    print("出错了")

#捕获单个异常
num_one=int(input("请输入被除数:"))
num_tow=int(input("请输入除数:"))
try:
    print("结果为:",num_one/num_tow)
except ZeroDivisionError as error:
    print("出错了,原因:",error)

2.捕获多个异常

#捕获多个异常

try:
    num_one=int(input("请输入被除数:"))
    num_tow=int(input("请输入除数:"))
    print("结果为:",num_one/num_tow)
except (ZeroDivisionError,ValueError) as error:
    print("出错了,原因:",error)

3.捕获全部异常

捕获全部异常可以将except后的异常类型设置成Exception或省略不写

书上说,如果省略异常类型,except子句中无法获取异常的具体信息。

不知道为啥我省略后报错了。

#捕获所有异常
try:
    num_one=int(input("请输入被除数:"))
    num_tow=int(input("请输入除数:"))
    print("结果为:",num_one/num_tow)
except Exception as error:
    print("出错了,原因:",error)

9.1.2异常结构中的else子句

else子句可以与try-except语句组合成try-except-else结构。

若try监控的代码没有异常,程序会执行else子句。

try:
    可能出错的代码
except [异常类型 [as error]]:
    捕获异常后的处理代码
else:
    没有异常的处理代码

9.1.3 异常结构中的finally子句

格式:

try:
    可能出错的代码
except [异常类型 [as error]]:
    捕获异常后的处理代码
else:
    一定执行的代码

9.2抛出异常

9.2.1使用raise语句抛出异常

和Java一样,异常不仅可以由程序自动引发,还可以由程序员自己添加。

用raise语句和assert语句主动抛出。

格式:

raise 异常类  #格式1:使用异常类名引发指定的异常
raise 异常类对象  #格式2: 使用异常类的对象引发指定的异常
raise  #格式3:  使用刚刚出现过的异常重新引发异常

1.使用异常类引发异常

使用raise异常类语句可以引发该语句中异常类对应的异常。

raise  IndexError

2.使用异常类对象引发异常

raise IndexError()

可以通过字符串指定异常的具体信息

raise IndexError("所引下标越界")

3.重新引发异常

使用不带任何参数的raise可以引发刚刚发生的异常

try:
    raise IndexError('索引下标超出范围')
except:
    raise

首先发生异常,然后运行except

运行的时候又发生异常,然后终止程序。

9.2.2使用assert语句抛出异常

assert   表达式[,异常信息]

表达式的值为false(假)时触发异常。

num_one=int(input("请输入被除数"))
num_two=int(input("请输入除数"))
assert num_two !=0 ,'除数不能为0'
result=num_one/num_two
print(num_one,'/',num_two,'=',result)

9.2.3异常的传递

如果异常没有被处理,默认情况下将该异常传递到上一级,如果上一级仍然没有解决,继续向上传递。

直到异常被处理或程序崩溃。

#异常的传递。
def get_width():
    print("get_width开始执行")
    num=int(input("请输入除数:"))
    width_len=10/num
    print("get_width执行结束")
    return width_len
def calc_area():
    print("calc_area开始执行")
    width_len=get_width()
    print("calc_area执行结束")
    return width_len*width_len

def show_area():
    try:
        print("show_area开始执行")
        area_val=calc_area()
        print(f"正方形的面积是:{area_val}")
        print("show_area执行结束")
    except ZeroDivisionError as e:
        print(f"捕捉到异常:{e}")
show_area()

从22行开始执行,首先调用show_area(),show_area中调用了calc_area(),calc_area()又调用了get_with(),异常发生在get_with(),但是get_with没有设置异常捕获,所以异常会传递到,calc_area(),然后再传递,到show_area()。最后被捕获。

#异常的传递。
def get_width():
    print("get_width开始执行")
    num=int(input("请输入除数:"))
    width_len=10/num
    print("get_width执行结束")
    return width_len
def calc_area():
    print("calc_area开始执行")
    width_len=get_width()
    print("calc_area执行结束")
    return width_len*width_len

def show_area():
    print("show_area开始执行")
    area_val=calc_area()
    print(f"正方形的面积是:{area_val}")
    print("show_area执行结束")
show_area()

9.3自定义异常

创建一个继承Exception类或Exception子类的类。(类名一般以Error结尾)。

class ShortInputError(Exception):
    '''自定义异常类'''
    def __init__(self, length,atleast) -> None:
        self.length=length
        self.atleast=atleast

try:
    text=input("请输入密码:")
    if len(text)<3:
        raise ShortInputError(len(text),3)
except ShortInputError as result:
    print("ShortInputError:输入的长度是%d,长度至少应该是%d"%
    (result.length,result.atleast))
else:
    print("密码设置成功")

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

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

相关文章

网络原理-网络发展史和通信基础

目录 1.网络发展史 面向终端的计算机网络 计算机网络阶段(局域网LAN) 组网方式 计算机网络互联阶段(广域网WAN) 2.通信基础 IP地址 端口号 网络协议 协议的作用 知名协议的默认端口 协议分层 分层的作用 OSI七层模型 TCP/IP五层模型 网络设备所在分层 网络分层…

《数据结构》八大排序和拓展的排序(详细教学并提供多种版本、动态图分析)

今天&#xff0c;我将带来数据结构的排序算法&#xff0c;排序算法作为校招中常考知识点之一&#xff0c;我们必须要熟练的掌握它,对自己提出高要求&#xff0c;才能有高回报。 目录排序的概念和应用内部排序和外部排序排序算法需要掌握的知识插入排序1.直接插入排序2.希尔排序…

【教程】Python实时检测CPU和GPU的功耗

目录 前言 GPU功耗检测方法 CPU功耗检测方法 sudo的困扰与解决 完整功耗分析示例代码 转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 前言 相关一些检测工具挺多的&#xff0c;比如powertop、powerstat、s-tui等。但如何通过代码的方式来实时检测&#xf…

Unsafe Fileupload-基础篇(文件上传绕过技巧与upload-labs靶场)

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 文件上传基础 01 什么是文件上传 02 文件上传产生漏洞的原因 03 文件上传漏洞危害 0…

济人药业更新招股书:计划在A股上市,中成药业务收入持续下滑

近日&#xff0c;安徽济人药业股份有限公司&#xff08;下称“济人药业”&#xff09;递交预披露更新招股书&#xff0c;准备在上海证券交易所主板上市。据贝多财经了解&#xff0c;济人药业于2022年7月1日递交上市申请&#xff0c;此次更新了截至2022年6月30日的财务数据等信息…

Android深入系统完全讲解(42)

红色部分 pc 000007cc 代表当前 pc 指向的位置。libnative-lib.so 代表在哪个库里面。于是我 们就需要知道&#xff0c;libnative-lib.so 库的 pc 000007cc 偏移位置&#xff0c;是个什么代码。 我们从 NDK 开发包中找到 D:\android-ndk-r19c\toolchains\arm-linux-androideabi…

远程控制软件

远程控制软件1. 概述2. TeamViewer3. Todesk4. 向日葵5. AnyDesk6. Splashtop结束语1. 概述 出门在外或者工作时突然需要访问家中的电脑拿取文件或者资料时&#xff0c;是直接跑回家拿去、还是委托家里人员帮忙呢&#xff1f; 这时候你就需要一类软件来完成这个任务了&#xf…

前端图片压缩方案及代码实现

1. 为什么要进行图片压缩? 随着互联网的发展&#xff0c;图片在各种网站和应用中铺天盖地&#xff0c;运营人员在后台管理系统中上传图片时常常忽略的图片的体积大小&#xff0c;随之产生的带宽和服务器容量也大大增加&#xff0c;图片压缩的需求随之产生。 常见的压缩图片的…

【笔记】SemGCN

一. 论文总结 1.1 核心贡献 提出了一种改进的图卷积操作&#xff0c;称为语义图卷积(SemGConv)&#xff0c;它源自cnn。其关键思想是学习图中暗示的边的信道权值&#xff0c;然后将它们与核矩阵结合起来。这大大提高了图卷积的能力。其次&#xff0c;我们引入了SemGCN&#x…

GPU服务器上跑深度学习模型

1 问题来源 近期在本地 Windows 系统上跑深度学习人群计数模型时&#xff0c;由于笔记本 NVIDIA 显卡 NVIDIA GeForce GTX 1650 的专用 GPU 内存只有 4 GB&#xff0c;无法设置较大的 batchsize 进行训练&#xff0c;导致模型训练时间过长&#xff0c;且易发生内存溢出&#xf…

年初五,迎财神 | 一张码如何实现多渠道(微信、支付宝、云闪付...)收款

大家好&#xff0c;我是小悟 今天是正月初五&#xff0c;天气超级好&#xff0c;也是迎财神的日子&#xff0c;祝大家顺风顺水&#xff0c;财源滚滚&#xff0c;钱兔似锦。 既然要发财&#xff0c;那自然少不了收款咯。如果你是一个商家&#xff0c;肯定是想收款的方式越方便越…

【手写 Promise 源码】第三篇 - 实现一个简版 Promise

一&#xff0c;前言 上一篇&#xff0c;结合示例介绍了 Promise 相关功能与特性分析&#xff0c;包含以下内容&#xff1a; Promise 基础特性&#xff1b;Promise 实例 API&#xff08;原型方法&#xff09;&#xff1b;Promise 静态 API&#xff08;类方法&#xff09;&…

【数据结构】极致详解:树与二叉树(中)——顺序存储实现

目录 &#x1f4d4;前言&#x1f4d4;&#xff1a; &#x1f4d9;一、顺序存储结构&#x1f4d9;&#xff1a; &#x1f4d8;二、堆&#x1f4d8;&#xff1a; 1.堆的概念及结构&#xff1a; 2.堆的性质&#xff1a; 3.堆的实现&#xff08;本文重点&#xff09;&#xf…

离线用户召回定时更新系列二

3.6.3 特征处理原则 离散数据 one-hot编码连续数据 归一化图片/文本 文章标签/关键词提取embedding3.6.4 优化训练方式 使用Batch SGD优化 加入正则化防止过拟合 3.6.5 spark LR 进行预估 目的&#xff1a;通过LR模型进行CTR预估步骤&#xff1a; 1、需要通过spark读取HIVE外…

Nacos学习笔记【part1】安装与注册服务

一、概述与安装 Nacos 是是一个构建云原生应用的动态服务发现、配置管理和服务管理平台&#xff0c;用于发现、配置和管理微服务&#xff0c;提供了一组简单易用的特性集&#xff0c;快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 更敏捷和容易地构建…

分享136个ASP源码,总有一款适合您

ASP源码 分享136个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 136个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/11db_K2QXns5pm8vMZBVPSw?pwds0lb 提取码&#x…

js 文字转语音 api SpeechSynthesisUtterance

SpeechSynthesisUtterance基本介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 官方文档地址&#xff08;https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesisUtterance…

【JavaEE初阶】第七节.多线程(基础篇)单例模式(案例一)

欢迎大家跟我一起来学习有关多线程的有关内容&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 前言 一、单例模式的概念 二、单例模式的简单实 2.1 饿汉模式 2.2 懒汉模式 总结 前言…

搭建Linux环境

学习Linux之前&#xff0c;我们首先需要在电脑上搭建Linux操作系统环境。 就好比说你买了一台电脑&#xff0c;需要使用Windows10操作系统&#xff0c;那么首先应该安装Windows操作系统&#xff08;刚买的电脑会引导你一步一步的安装&#xff09;。 一、Linux环境搭建的三种方式…

数据结构 第三章 栈和队列(队列)

感谢&#xff1a;点击收听 1 基本知识点 1、允许删除的一端称为队头(front) 2、允许插入的一端称为队尾(rear) 3、当队列中没有元素时称为空队列 4、顺序队列&#xff1a; 1 使用顺序表来实现队列 2 两个指针分别指向队列的前端和尾端 **3 如果队列的大小为MaxSize个,那么元…