首页 > 其他分享 >异常捕获

异常捕获

时间:2024-10-31 14:21:54浏览次数:2  
标签:语句 捕获 except try print 异常

异常捕获

当你的程序出现例外情况时就会发生异常(Exception)。例如,当你想要读取一个文件时,而那个文件却不存在,怎么办?又或者你在程序执报错了怎么办?这些通过使用异常来进行处理。类似地,如果你的程序中出现了一些无效的语句该怎么办?python 将会对此进行处理,举起(Raises)它的小手来告诉你哪里出现了一个错误(Error)。

当发生异常时,我们就需要对异常进行捕获,然后进行相应的处理。python的异常捕获常用try...except...结构,把可能发生错误的语句放在try模块里,用except来处理异常,每一个try,都必须至少对应一个except。此外,与python异常相关的关键字主要有

关键字 关键字说明
try/except 捕获异常并处理
pass 忽略异常
as 定义异常实例(except MyError as e)
else 如果try中的语句没有引发异常,则执行else中的语句
finally 无论是否出现异常,都执行的代码
raise 抛出/引发异常

try捕获到异常后,将不往下执行

异常捕获

预判在某一个位置可能会出现异常的时候,将这个错误捕获出来

try:				#捕获对象
	被捕获子语句
except 异常类型:	#捕获报错
	操作语句

捕获所有异常

包含键盘中断和程序退出请求,慎用

try:
     <语句>
except:
     <语句>

案例

try:
    import sys
    sys.exit()
except:
    print("999")

捕获指定异常

try:
     <语句>
 
except <异常名>:
 
      print('异常说明')
try:
    print("name-1")
    name
    print("name-2")
except NameError:
    print("格式错误")

万能异常捕获,捕获所有异常

try:
     <语句>
 
except Exception:
 
      print('异常说明')
try:
    f = open("file-not-exists", "r")
except Exception:
    print("错误类型")

捕获多个异常

捕获多个异常有两种方式,

第一种是except同时处理多个异常,不区分优先级:

try:
     <语句>
 
except (<异常名1>, <异常名2>, ...):
 
      print('异常说明')

第二种是区分优先级的:

try:
     <语句>
 
except <异常名1>:
 
      print('异常说明1')
 
except <异常名2>:
 
      print('异常说明2')
 
except <异常名3>:
 
      print('异常说明3')

该种异常处理语法规则是:

  • 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
  • 如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
  • 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
  • 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

异常中的else

如果判断完没有某些异常之后还想做其他事,就可以使用下面这样的else语句。

try:
     <语句>
 
except <异常名1>:
 
      print('异常说明1')
 
except <异常名2>:
 
      print('异常说明2')
 
else:
 
      <语句>  # try语句中没有异常则执行此段代码

使用else字句把所有的语句都放在try字句里面要好,这样可以避免一些意想不到,而except又无法捕获的异常。

异常中的finally

try..finally...语句无论是否发生异常都将会执行的最后的代码

     <语句>

raise主动触发异常

可以使用raise语句自己触发异常,raise语法格式

raise [Exception [, args [, traceback]]]

函数实现两个数值的除法计算

"""
函数实现两个数值的除法计算*
"""

def division(a,b):
    num = a / b
    return num

try:
    bcf = int(input("输入被除数:"))
    cf = int(input("输入除数:"))

    endnum = division(bcf,cf)
    print(endnum)
except ZeroDivisionError:
    print("除数不能为0")

except ValueError:
    print("输入一个整数")
except EOFError:
    pass

except KeyboardInterrupt:
    pass

常见异常类型

异常名称 描述
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

标签:语句,捕获,except,try,print,异常
From: https://www.cnblogs.com/megshuai/p/18517672

相关文章

  • Adobe Character Animator 2025 v25.0 (macOS, Windows) - 动作捕获动画软件
    AdobeCharacterAnimator2025v25.0(macOS,Windows)-动作捕获动画软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、Ad......
  • MySQL从节点异常宕机重启后遇到主键冲突
    一台虚机在迁移过程中遇到点问题,然后运维做了重启的操作。重启后,发现该虚机中的mysql从库与主库的同步失败了。登录后查看,发现sqlthread停止运行了:mysql>showslavestatus\G***************************1.row***************************Slave_IO_St......
  • 无监督异常检测算法
    1、概述无监督异常检测方法有重建类、特征类、流模型和教师学生网络这几种,之前了解过重建模型,重建模型大多采用VAE+Diffusion+Transformer类模型,对缺陷特征进行创建,本次总结主要分析特征类的鼻祖模型PatchCore,并找到其论文和源码,了解其工作原理的一些细节。图1描述了Pat......
  • 【JavaEE初阶】深入理解TCP协议特性之延时应答,捎带应答,面向字节流以及异常处理
     前言......
  • Feign失败重试与全局异常捕获
    feign注册spring加载的时候通过@EnableFeignClients的FeignClientsRegistrar注册扫描所以得FeignClient以及Configuration,最终注册为ReflectiveFeign,最终通过代理类FeignInvocationHandler实现方法的调用,在FeignInvocationHandler中通过SynchronousMethodHandler方法执行实际逻......
  • 如何快速解决RS-485组网通讯异常?
    RS-485总线的好处大家都知道,用隔离模块能让通信更稳定。但实际用的时候,可能会遇到通信不了、出错或者收发器坏掉的问题。本文将深度剖析RS-485组网问题。应用问题当出现通信错误或者不能通信时首先判断应用是否符合表1中的应用情况。表1RS-485总线应用情况表1中三种......
  • Python小白学习教程从入门到入坑------第十八课 异常模块与包【下】(语法基础)
    一、内置全局变量__name__在Python中,有一些内置的全局变量和特殊变量,它们是由Python解释器预定义的,可以在代码的任何地方直接使用。这些变量通常用于提供关于当前解释器状态的信息,或者用于控制解释器的行为在Python中,__name__是一个内置的特殊变量,也被称为“魔法变量”或“......
  • 硬件调试-PCBA上电调试异常
    问题点:        上电烧写程序,硬件异常,这种问题的排查思路:分析思路:1不考虑软件问题,首先,硬件异常第一先想到的是电源供电,如果就一个电压就测一下是否正常;如果是有稳压芯片,要测一下稳压前后的电压是否正常,每级供电电路电源是否正常,一般很多问题都是供电出问题。2电源......
  • 异常处理汇总-Java&Mendix&Spark&SQL&etc...
    1.MyBatis映射问题执行计算过程中出现错误,错误消息:MappedStatementscollectiondoesnotcontainvaluefor... 问题原因:configure.xml文件中未配置对应路径。2. java:Annotationprocessingisnotsupportedformodulecycles.Pleaseensurethatallmodulesfrom......
  • CesiumJS 案例 P11:添加图片图层异常、添加标记、添加标记并指定大小、添加标记并指定
    CesiumJSCesiumJSAPI:https://cesium.com/learn/cesiumjs/ref-doc/index.htmlCesiumJS是一个开源的JavaScript库,它用于在网页中创建和控制3D地球仪(地图)一、添加图片图层异常<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/>......