【Python基础】异常

news2024/11/25 18:44:44

文章目录

    • @[toc]
      • 什么是异常
      • 异常处理
        • try...except...语句
          • 格式
          • 示例
            • 不使用异常处理时
            • 使用异常处理时
      • 抛出异常
        • 示例
      • else语句
        • 格式
        • 示例
      • finally语句
        • 格式
        • 示例
        • finally语句的作用
      • 自定义异常类
        • 示例

因上努力

个人主页:丷从心·

系列专栏:Python基础

学习指南:Python学习指南

果上随缘


什么是异常

  • 运行如下程序
print(num)
Traceback (most recent call last):
  File "C:/Users/FOLLOW_MY_HEART/Desktop/Python Basics/【Python基础】异常/test.py", line 1, in <module>
    print(num)
NameError: name 'num' is not defined
  • 程序运行出现错误时就是产生了异常,打印报错信息
  • 异常是Python中的对象,表示一个错误,当程序产生异常时,需要对异常进行捕获和处理,否则程序会终止运行
  • 每一个异常都是异常类的实例,可以被捕获,使得错误可以被及时处理而不会使整个程序终止

异常处理

try…except…语句
格式
try:
    可能会产生异常的代码, 如果产生异常, try 语句会对异常进行捕获
except 异常类型:
    try 语句捕获到异常时, except 语句会对异常进行处理
示例
不使用异常处理时
print(1 / 0)

print('产生异常时, 程序在异常处终止, 无法运行到这里...')
Traceback (most recent call last):
  File "C:/Users/FOLLOW_MY_HEART/Desktop/Python Basics/【Python基础】异常/test.py", line 1, in <module>
    print(1 / 0)
ZeroDivisionError: division by zero
  • 当我们使用 0 0 0作为除数时会产生ZeroDivisionError除零异常,如果没有对异常进行捕获和处理,那么整个程序就会终止,产生异常处下面的代码无法被运行
使用异常处理时
try:
    print(1 / 0)
except ZeroDivisionError as e:
    print(e)

    print('除数不能为 0')

print('即使产生异常, 依然能够运行到这里...')
division by zero
除数不能为 0
即使产生异常, 依然能够运行到这里...
  • 使用异常处理时,产生ZeroDivisionError异常时,try语句会对异常进行捕获,并跳转到except语句,然后通过except语句对异常进行处理,此时程序并不会因为异常而终止,能够正常运行下面的代码
  • as关键字用于将异常对象赋值给一个变量,可以使用变量e打印异常信息或进行其他操作

抛出异常

  • Python中使用raise关键字抛出异常,可以使用异常类或实例参数调用raise语句抛出异常,使用异常类抛出异常时会自动创建一个实例
示例
raise Exception
Traceback (most recent call last):
  File "C:/Users/FOLLOW_MY_HEART/Desktop/Python Basics/【Python基础】异常/test.py", line 1, in <module>
    raise Exception
Exception
  • Exception是所有异常类的基类,没有相关错误信息
raise NameError('This is NameError')
Traceback (most recent call last):
  File "C:/Users/FOLLOW_MY_HEART/Desktop/Python Basics/【Python基础】异常/test.py", line 1, in <module>
    raise NameError('This is NameError')
NameError: This is NameError
  • 上述代码中,在异常类实例化时自定义了错误信息,产生异常时会打印这些错误信息
  • 如果只是想知道是否产生了异常,而不想进行处理,使用raise就可以再次将异常抛出
try:
    raise NameError('This is NameError')
except NameError:
    print('产生了 NameError 异常')

    raise
产生了 NameError 异常
Traceback (most recent call last):
  File "C:/Users/FOLLOW_MY_HEART/Desktop/Python Basics/【Python基础】异常/test.py", line 2, in <module>
    raise NameError('This is NameError')
NameError: This is NameError
  • 可以看到,执行了print('产生了 NameError 异常')后,异常被再次抛出

else语句

  • 没有产生异常时需要运行的代码放在else语句中
格式
try:
    可能会产生异常的代码, 如果产生异常, try 语句会对异常进行捕获
except 异常类型:
    try 语句捕获到异常时, except 语句会对异常进行处理
else:
    没有产生异常时, 需要运行的代码
示例
try:
    print(1 / 1)
except ZeroDivisionError as e:
    print(e)

    print('除数不能为 0')
else:
    print('没有产生异常时, 会运行到这里...')
1.0
没有产生异常时会运行到这里...

finally语句

  • 无论程序是否产生异常,都会执行的代码放在finally语句中
  • finally不能单独使用,需要搭配try语句使用
格式
try:
    可能会产生异常的代码, 如果产生异常, try 语句会对异常进行捕获
except 异常类型:
    try 语句捕获到异常时, except 语句会对异常进行处理
else:
    没有产生异常时, 需要运行的代码
finally:
    无论是否产生异常,都会运行的代码
示例
try:
    print(num)
except ZeroDivisionError as e:
    print(e)

    print('除数不能为 0')
else:
    print('没有产生异常时, 会运行到这里...')
finally:
    print('无论是否产生异常, 都会运行到这里...')
无论是否产生异常, 都会运行到这里...
Traceback (most recent call last):
  File "C:/Users/FOLLOW_MY_HEART/Desktop/Python Basics/【Python基础】异常/test.py", line 2, in <module>
    print(num)
NameError: name 'num' is not defined
  • 上述代码中,print(num)NameError异常,而没有定义对NameError异常的处理,所以仍然会产生异常,在程序终止之前会执行finally语句中的代码,之后程序才会终止
  • 可以定义对多种异常的处理
try:
    print(num)
except ZeroDivisionError as e:
    print(e)

    print('除数不能为 0')
except NameError as e:
    print(e)

    print('变量需要定义后再使用')
else:
    print('没有产生异常时, 会运行到这里...')
finally:
    print('无论是否产生异常, 都会运行到这里...')
name 'num' is not defined
变量需要定义后再使用
无论是否产生异常, 都会运行到这里...
finally语句的作用
  • finally语句在关闭文件或数据库连接时非常有用,将分别在文件读写章节和数据库章节进行介绍

自定义异常类

  • 自定义异常类需要继承Exception异常基类
示例
class PasswordError(Exception):
    def __str__(self):
        return '密码错误...'

    def __repr__(self):
        return '密码错误...'


name = input('请输入用户名: ')
password = input('请输入密码: ')

local_name = 'follow__my_heart'
local_password = 'admin'

try:
    if name != local_name or password != local_password:
        raise PasswordError
except PasswordError as e:
    print(e)
else:
    print('密码正确, 欢迎...')
请输入用户名: follow__my_heart
请输入密码: 123456
密码错误...
请输入用户名: follow__my_heart
请输入密码: admin
密码正确, 欢迎...

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

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

相关文章

论文复现---MUTANT

Robust anomaly detection for multivariate time series through temporal GCNs and attention-based VAE 基于时序神经网络和基于注意力的VAE的多变量时间序列鲁棒异常检测 https://github.com/Coac-syf/MUTANT * numpy1.21.2* torch1.9.1* scipy1.7.1* scikit-learn0.24.2*…

海信发布《黑神话:悟空》定制电视E8N新品,重塑大屏游戏体验

4月17日&#xff0c;在“AI美好生活”2024海信电视E8系列新品发布会上&#xff0c;海信电视官宣成为《黑神话&#xff1a;悟空》全球官方合作伙伴。同时&#xff0c;海信电视还为广大游戏玩家带来了《黑神话&#xff1a;悟空》的显示CP&#xff0c;推出了官方定制电视——旗舰新…

ModuleNotFoundError: No module named ‘scripts.animatediff_mm‘ 解决方案

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本文主要介绍在使用 Stable Diffusion WebUI 安装 AnimateDiff 插件后出现的ModuleNotFoundError: No module named scripts.animatediff_mm异常的解决方案,希望…

Linux小知识:xargs命令的使用与技巧

在Linux系统中&#xff0c;命令行工具是用户与系统进行交互的重要桥梁。其中&#xff0c;xargs命令是一个非常实用的工具&#xff0c;它能够将标准输入的数据转换为命令行参数&#xff0c;从而方便用户对数据进行批量处理。今天&#xff0c;我们就来详细了解一下xargs命令的使用…

claude国内不能用

AnthropicAI 公司旗下的Claude 3 大型语言模型&#xff0c;以其卓越的性能直接挑战了GPT-4的市场地位。Claude 3 系列中包含了几个不同版本&#xff0c;如Claude 3 Opus、Claude 3 Sonnet 以及 Claude 3 Haiku&#xff0c;每个版本都针对特定的应用场景进行了优化。 在这些版本…

微信小程序的支付功能,纯前端步骤,超级详细

1、首先在微信开放平台&#xff0c;申请移动应用并开通支付功能&#xff0c;申请应用后可以获取 AppID 和 AppSecret 值 2、在前端项目中的配置参数中打开支付功能 步骤&#xff1a;项目的根目录下有个manifest.json文件&#xff0c;打开并在左侧目录找到APP SDK配置&#xf…

Kafka 的这 6 个场景会丢失消息

一、概述 今天来聊一聊我们使用 Kafka 的时候&#xff0c;怎样能保证不丢失消息呢的话题。首先我们看一下 Kafka 的架构图&#xff1a; 二、异步发送 Producer 异步发送是丢失消息比较多的场景&#xff0c;Kafka 异步发送的代码如下&#xff1a; ProducerRecord<byte[]…

HTML5+CSS3小实例:菜单按钮的三种切换动画

实例:菜单按钮的三种切换动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initia…

机器视觉系统:电容表面瑕疵缺陷检测的精准“守望者”

在电子行业中&#xff0c;电容器作为关键元件&#xff0c;其质量和性能对于整个产品的稳定性和可靠性至关重要。电容器的表面质量直接影响其性能和寿命&#xff0c;因此&#xff0c;对电容表面瑕疵缺陷的精确检测显得尤为重要。近年来&#xff0c;随着机器视觉技术的飞速发展&a…

2024年【焊工(初级)】考试题及焊工(初级)报名考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 焊工&#xff08;初级&#xff09;考试题考前必练&#xff01;安全生产模拟考试一点通每个月更新焊工&#xff08;初级&#xff09;报名考试题目及答案&#xff01;多做几遍&#xff0c;其实通过焊工&#xff08;初级…

营销枢纽云打造可持续的客户关系管理:从销售驱动到公司数字资产增值

激烈的市场竞争中&#xff0c;销售驱动的企业往往更依赖关系型销售人员来获取和维护客户资源。但是&#xff0c;随着人才流动性的增强&#xff0c;确保这些客户数据资产不会随销售的个人离职而流失&#xff0c;是现阶段企业所面临的一大挑战。那么&#xff0c;我们如何将销售团…

错过后悔的三大热门婴儿洗衣机总结,希亦、RUUFFY、觉飞谁更值得?

如果将宝宝衣物和大人的衣服一起放进到家用的普通洗衣机里面一起清洗的话&#xff0c;会让宝宝的衣物会沾染上大人身上的各种有害的细菌&#xff0c;而且宝宝的洗涤剂和大人的一般都不同&#xff0c;一般都要用更温和的洗涤剂&#xff0c;和大人用一样的洗涤剂放洗衣机里面搅&a…

word批量修改表格样式

利用宏&#xff0c;批量选中表格&#xff0c;然后利用段落和表设计来操作。 利用宏&#xff0c;批量选中表格&#xff0c;参考百度安全验证段落&#xff0c;表格里面的内容有空格&#xff0c;应该是有缩进&#xff0c;在段落中去掉缩进&#xff0c;即缩进-特殊&#xff0c;选择…

[C++][算法基础]最大公约数(欧几里得算法)

给定 n 对正整数 ,&#xff0c;请你求出每对数的最大公约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数对 ,。 输出格式 输出共 n 行&#xff0c;每行输出一个整数对的最大公约数。 数据范围 1≤n≤, 1≤,≤2 输入样例&#xff1a; 2 3 …

汽车视频智能剪辑解决方案,满足用户对高品质汽车视频的追求

随着汽车智能化和互联网技术的快速发展&#xff0c;车载视频已经成为现代驾驶生活不可或缺的一部分。然而面对海量的行车视频&#xff0c;如何高效地剪辑、整理并分享这些精彩瞬间&#xff0c;一直是车主和汽车内容创作者们所面临的难题。美摄科技&#xff0c;作为领先的视频智…

Springboot项目的测试类书写(速通)

目录 前言1. 单元测试的测试类2. 框架测试的测试类 前言 在实际开发中&#xff0c;如果只是做一个简单的单元测试&#xff08;不涉及端到端、数据库交互、API调用、消息队列处理等&#xff09;&#xff0c;我为了方便一般都是找块儿地方写一个main方法来跑一下就行了&#xff…

这些年背过的面试题--MySQL篇

MySQL一直是面试中的热点问题&#xff0c;也难道了很多的面试者。其实MySQL没那么难&#xff0c;只是大家没有系统化、实战性的过去学习、总结。同时很多开发者在实际的开发过程中也很少去接触一些偏向底层的知识。 本手册&#xff0c;已总结成完整的PDF文档。想获取该文档&am…

C++继承(全)

目录 继承 1.继承定义 2.继承方式和访问限定符 3.继承基类成员后&#xff0c;派生类相应的访问方式的变化 4.基类和派生类的对象赋值转换 1.切片或切割 2.赋值兼容 5.作用域 6.隐藏/重定义 派生类的默认成员函数 1.构造函数 2.拷贝构造函数 3.赋值运算符重载 4.析…

怎么查苹果手机激活时间?立即get这3个方法

苹果手机的激活时间能帮助我们了解手机的购买时间和使用历史&#xff0c;对于二手交易也是一个重要的参考。然而&#xff0c;许多人可能不知道如何查看手机的激活时间。怎么查苹果手机激活时间&#xff1f;在本文中&#xff0c;我们将介绍三种简单而有效的方法&#xff0c;让您…

ros1 C++ 输出helloworld

1、创建工作空间并初始化 mkdir -p 自定义空间名称/src cd 自定义空间名称 catkin_make运行完&#xff0c;生成文件如下图&#xff1a; 2、进入 src 创建 ros 包并添加依赖 cd src catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs这里&#xff0c;我的自定义ROS包名…