Python基础(九)—异常except、else&with、异常的名称层次

Python中的错误处理与资源管理:try、except、finally与with语句详解 通过合理使用这些语句,我们可以编写更健壮、更可靠的代码,有效应对运行时错误,并确保资源的正确释放。在这个例子中,我们使用with语句打开一个文件,并在with块中使用文件对象进行操作。当try块中的代码抛出异常时,程序不会立即崩溃,而是会跳转到相应的except块(如果有的话)处理该异常。然后,我们模拟了一个异常。无论是否发生异常,finally块中的代码都会执行,确保我们可以清理资源(在这个例子中是打印“清理资源”的信息)。无论try块中的代码是否成功执行,finally块中的代码都会执行。 阅读详情

try、except、else、finally

  • 结构

    try:
         Normal execution block
    except A as reason:
         Exception A handle
         print('出错了:'+str(reason))
    except B:
         Exception B handle
    except:
         Other exception handle
    else:
         if no exception,get here
    finally:
         print("finally")   
    
  • 执行顺序

    • 正常执行的程序在try下面的Normal execution block执行块中执行,在执行过程中如果发生了异常,则中断当前在Normal execution block中的执行跳转到对应的异常处理块中开始执行;
    • 从第一个except X处开始查找,如果找到了对应的exception类型则进入其提供的exception handle中进行处理,如果没有找到则直接进入except块处进行处理。except块是可选项,如果没有提供,该exception将会被提交给python进行默认处理,处理方式则是终止应用程序并打印提示信息;
    • 如果在Normal execution block执行块中执行过程中没有发生任何异常,则在执行完Normal execution block后会进入else执行块中(如果存在的话)执行。
    • 无论是否发生了异常,只要提供了finally语句,以上try/except/else/finally代码块执行的最后一步总是执行finally所对应的代码块。
  • 注意

    • 在上面所示的完整语句中try/except/else/finally所出现的顺序必须是try–>except X–>except–>else–>finally,即所有的except必须在else和finally之前,else(如果有的话)必须在finally之前,而except X必须在except之前。否则会出现语法错误。
    • 对于上面所展示的try/except完整格式而言,else和finally都是可选的,而不是必须的,但是如果存在的话else必须在finally之前,finally(如果存在的话)必须在整个语句的最后位置。
    • 在上面的完整语句中,else语句的存在必须以except X或者except语句为前提,如果在没有except语句的try block中使用else语句会引发语法错误。也就是说else不能与try/finally配合使用。
  • else的含义

    • 要么怎么样,要么不怎么样
      这种就是正常的if else语句。
    • 干完了能怎么样,干不完就别想怎样
      跟while、for配合使用,只有当循环结束才运行else内容,如果循环中break了,else则不执行。如以下代码:
        def showMaxFactor(num):
        count = num // 2  # python3的新的地板除
        while count > 1:
            if num % count == 0:
                print('%d最大公约数为%d'%(num, count))
                break
            count -= 1
        else:
            print('%d是素数'%num)
        
        showMaxFactor(25)
        showMaxFactor(11)
      
    • 如果没有问题,那就干吧
      这种情况都是except X或者except语句为前提,如果在没有except语句的try block中使用else语句会引发语法错误。也就是说else不能与try/finally配合使用。代码使用如最开始的例子。

raise、with

  • raise
    使用raise,程序自己引发异常。

    	raise ZeroDivisionError  # ZeroDivisionError
    	raise ZeroDivisionError('除数为0的异常')  # ZeroDivisionError: 除数为0的异常
    
  • with
    利用with语句减少异常处理的代码,不用最后使用finally进行文件的关闭。

  	try:
  	    f = open('d:\\blog\\data.txt', 'w')
  	    for line in f:
  	        print(f)
  	except OSError as reason:
  	    print('出错:'+str(reason))
  	finally:
  	    f.close()

  	try:
  	    with open('d:\\blog\\data.txt', 'w') as f:
  	        for line in f:
  	            print(f)
  	except OSError as reason:
  	    print('出错:'+str(reason))

  	'''
  	出错:not readable
  	出错:not readable
  	'''

异常种类及层次结构

  • 异常的种类主要如下:
异常名称异常说明
AssertionError断言语句(assert)失败
AttributeError尝试访问未知的对象属性
EOFError用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError浮点计算错误
GeneratorExitgenerator.close()方法被调用的时候
ImportError导入模块失败的时候
IndexError索引超出序列的范围
KeyError字典中查找一个不存在的关键字
KeyboardInterrupt用户输入中断键(Ctrl+c)
MemoryError内存溢出(可通过删除对象释放内存)
NameError尝试访问一个不存在的变量
NotImplementedError尚未实现的方法
OSError操作系统产生的异常(例如打开一个不存在的文件)
OverflowError数值运算超出最大限制
ReferenceError弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError一般的运行时错误
StopIteration迭代器没有更多的值
SyntaxErrorPython的语法错误
IndentationError缩进错误
TabErrorTab和空格混合使用
SystemErrorPython编译器系统错误
SystemExitPython编译器进程被关闭
TypeError不同类型间的无效操作
UnboundLocalError访问一个未初始化的本地变量(NameError的子类)
UnicodeErrorUnicode相关的错误(ValueError的子类)
UnicodeEncodeErrorUnicode编码时的错误(UnicodeError的子类)
UnicodeDecodeErrorUnicode解码时的错误(UnicodeError的子类)
UnicodeTranslateErrorUnicode转换时的错误(UnicodeError的子类)
ValueError传入无效的参数
ZeroDivisionError除数为零
  • 异常层次结构

    BaseException
    +-- SystemExit
    +-- KeyboardInterrupt
    +-- GeneratorExit
    +-- Exception
      +-- StopIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning
    

个人博客:Loak 正 - 关注人工智能及互联网的个人博客
文章地址:Python基础(九)—异常except、else&with、异常的名称层次

详解python异常处理try、except 本文主要介绍了python异常处理try、except,希望能对新手有所帮助。 文章目录 1. try语句 2. 引出错误语句 3. python标准异常 4. else用法 阅读详情

相关推荐

泰山派RK3576开发板部署Qwen3-VL-4B多模态模型实战指南:从模型转换到板端推理全流程

本文提供了在泰山派RK3576开发板上部署阿里Qwen3-VL-4B多模态模型的完整实战指南。详细介绍了从环境准备、模型转换(包括视觉模型转换为.rknn格式和语言模型转换为.rkllm格式)、交叉编译到板端推理的全流程,重点讲解了如何利用RK3576的NPU进行硬件加速,实现高效的边缘AI应用。

weixin_30356433的博客 260

Python学习笔记39:Python_property属性_with语句和上下文管理器

property属性 学习目标 能够知道装饰器方式的property属性的定义方式 1. property属性的介绍 property属性就是负责把一个方法当做属性进行使用,这样做可以简化代码使用。 定义property属性有两种方式 装饰器方式 类属性方式 2. 装饰器方式 class Person(object): def __init__(self): self.__age = 0 # 装饰器方式的property, 把age方法当做属性使用, 表示当获取

JasonYangQ的博客 1万+

手把手教你用U盘给海信IP501H刷机:GK6323V100C芯片的4.4.2和9.0固件实战

本文详细介绍了海信IP501H电视盒子基于GK6323V100C芯片的刷机实战指南,涵盖Android 4.4.2强刷和Android 9.0免拆刷机两种方案。从工具准备、短接操作到ADB调试,提供全流程解析和常见问题解决方案,帮助用户安全高效地完成刷机操作。

lemon的博客 1458

python except用法,使用python“ with”带有try-except块的语句

Is this the right way to use the python "with" statement in combination with a try-except block?:try:with open("file", "r") as f:line = f.readline()except IOError:If it is, then considering the old wa...

weixin_28339527的博客 774

态路小课堂丨三款800G光模块方案介绍—SR8/DR8/2FR4

800G QSFP-DD 2FR4光模块使用CWDM4波长(1271/1291/1311/1331nm),单通道速率为100G,通过MUX减小光纤的数目,其光学接口采用CS接口或双芯LC接口。

poposu的博客 2390

学习记录-Simpack生成车轮不圆的几种示例

单阶、多阶和实测车轮多边形的添加教程

weixin_51965897的博客 3707

Python小技巧之——巧用with语句实现异常处理

Python的异常处理语句try...except大家都很熟悉了,例如: try: 1/0 except(Exception) as ex: print(ex) integer division or modulo by zero 这种方式的好处是直观,对于逻辑简单的try...except语句比较有效。 但是如果try逻辑比较复杂,或者有大段的except处理语句,这种方

wifeisboss的博客 4132

ThinkPHP+Layui开发的ERP管理系统

ERP采购生产销售系统,一款基于ThinkPHP+Layui开发的ERP管理系统,帮助中小企业实现ERP管理规范化,此系统能为你解决五大方面的经营问题:1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理,适用于:服装鞋帽、化妆品、机械机电、家具装潢、建材行业、快销品、母婴用品、办公用品、汽配汽修、生鲜农贸、手机通讯、数码家电、医药用品、制造业、信息技术服务行业等。提供全部无加密服务端和前端源代码,独立部署,不受限制。

u011092458的博客 789

python异常处理与with用法day11/早上

try: #尝试运行,执行try里的代码直到遇到错误再执行except a=[1,2] print(a[0]) raise KeyError("键错误") #抛出异常 print(a[3]) except KeyError as e: #捕获异常 print("出现错误",e) els...

qq_39112101的博客 363

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

XiaoqiangClub的博客 1万+

【代码审计】专栏文章汇总

代码审计基础 代码审计基础 源代码审计思路(上) 源代码审计思路(下) 常见漏洞审计 认证会话管理(上) 认证会话管理(下) 输入输出验证 授权管理审计 业务安全审计 第三方组件审计

武天旭的博客 4846

95. Python基础教程:异常处理try...except语句

【语法总结】try : # 可能会发生异常的代码块 # 1. 单独的except except : print("输入有问题,程序不能正常输出结果。") # 2. except+异常名称 except ZeroDivisionError : print("输入有问题,程序不能正常输出结果。

weixin_63986098的博客 5万+

华为交换机系统软件升级和安全漏洞修复教程

在华为交换机国网可以查询到华为交换机官方电话:400-822-9999,通过下命令查询出需要升级的交换机软件版本和补丁版本号发给华为,获取新的升级系统软件和补丁以及升级教程。下面是我升级华为交换机总结的教程,作为参考。...

星如雨落 2965

Python异常处理:多异常捕获(except多个类型)

深入理解多异常捕获(except多个类型)的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Python从入门到精通教程》Python异常处理篇(第六篇)。

未来 95% 的 AI 应用将变得隐形,广泛融入日常生活。 1808

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python异常处理try-except语句

1 为什么用try-except 语句 首先我们来说说,为什么要用try-except 语句。简单来说,为了避免程序意外退出,而需要使用的语句。 首先来看一段代码,你会更加容易理解: try: 1 / 0 except ZeroDivisionError: print('Divided by zero') print('Should reach here') 执行后: Divided by zero Should reach here 试想一下,如果我们直接用1/0,执行后会出现什

water19111213的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python实战:Python异常处理机制及try-except-finally

本文将详细介绍Python中的异常处理机制,以及如何使用try-except-finally语句来处理程序中的错误和异常情况。我们将深入探讨异常的概念、类型和层次结构,并展示如何在实际编程中应用异常处理来提高代码的健壮性和可维护性。

oandy0的博客 2147

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python异常处理:try-except捕获异常的基本用法

本文介绍了Python中try-except异常处理的基本用法,主要内容包括: 核心概念:解释try-except的基本定义及其在Python编程中的重要性,异常处理能提升开发效率、保障代码质量。 技术原理:通过代码示例展示异常处理的基本语法结构,包括try块、except块的使用方式。 实践应用: 基础示例:演示捕获特定异常和通用异常的方法 进阶示例:展示在类方法中使用异常处理的案例 常见问题:列出环境配置和运行时可能遇到的典型异常问题及解决方案。 本文属于Python异常处理系列教程,适合从入门到精通的

未来 95% 的 AI 应用将变得隐形,广泛融入日常生活。 2410

Python 异常控制详解:try-except 的应用与多种异常处理策略

在 Python 编程中,异常处理是确保程序稳定运行的重要手段。本文深入讲解了如何通过 `try-except` 机制处理常见的错误。首先介绍了如何捕获和处理特定异常,如 `FileNotFoundError`,以及如何使用 `try-except` 来处理多个异常情况。接着,讲解了 `try-except-else` 和 `try-except-finally` 的不同使用场景,确保程序在各种条件下都能正常运行。最后,提供了手动抛出异常的 `raise` 用法,并列出了常见的 Python 异常类型,为编

敲代码别忘了喝上一杯凉白开。 3275

Python异常处理:except...as...获取异常信息

本文是《Python从入门到精通教程》异常处理系列第六篇,重点讲解except...as...语句的用法。主要内容包括: 核心概念:except...as...用于捕获异常并将异常对象赋值给变量,便于获取详细错误信息 重要性:提高调试效率、增强代码健壮性、便于日志记录和问题排查 典型应用场景:数据验证、文件操作、网络请求等可能出现异常的环节 实现方法:通过try-except块结合as关键字捕获异常对象 实践示例:展示了基础异常捕获和包

未来 95% 的 AI 应用将变得隐形,广泛融入日常生活。 7997

python3捕获异常try/except

代码中的错误分两大类:错误和异常 错误:主要是语法错误,在敲代码时候编辑器提示的错误。 异常:一段代码在运行前无法判断是否会出错。运行时可能出错,也可能不出错。 为什么要捕获异常呢? 例如下面代码,运行前无法判断是否能写入成功。如果没有异常,那么这样写是可以的,执行完写入之后会打印“完成”两字。 f = open("测试.txt", "w") f.write("写入点内容到上面的测试文...

weixin_41078495的博客 7892

Python中如何使用异常处理try-except来捕捉异常

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 在Java中使用try-catch来捕获异常,而在Python中类似,使用try-except来捕获发生的异常事件。基本结构如下: try: <语句> #运行别的代码 except <名字>: <语句>

不想写代码的程序猿 4462

Python之try-except异常处理和raise主动抛出异常

一、异常 在Python程序执行过程中发生的异常可以通过try语句来检测,可以把需要检测的语句放置在try块里 面,try块里面的语句发生的异常都会被try语句检测到,并抛出异常给Python解释器,Python解释器会寻找能处理这一异常的代码,并把当前异 常交给其处理。这一过程称为捕获异常。如果Python解释器找不到处理该异常的代码,Python解释器会终止该程序的执行。 python中通...

qq_43830639的博客 3223

python的try和except用法_Python异常处理中try,except用法?

我来详细介绍异常编码的语法模式,try/except/else和try/finally。先重新回顾一下try、except、else、finally几个关键字:try后面紧跟着缩进的语句代码,代表此语句的主要动作:试着执行的程序代码。然后是一个或多个except分句来识别要捕获的异常,except子句内定义try代码块内引发的异常处理器,最后是一个可选的else分句,提供没发生异常时要执行的语句。...

weixin_39610807的博客 3270

嵌入式 python异常except语句用法与引发异常

except: #捕获所有异常 except: : #捕获指定异常 except: except:,:捕获指定异常及其附加的数据 except:::捕获异常名1或者异常名2,及附加的数据库 常用异常名: 异常名    描述 AttributeError 调用不存在的方法引发的异常 EOFError     遇到文件末尾引发的异常 ImportError 导入模块出错引发的异常 IndexErr

skdkjxy的专栏 5976

[转载] python中try Except抛出异常使用方法

参考链接: Python中的try和except 对于python自动化测试同学来讲try的作用太大了。 我们要保证每条用例都能得到我们预期并在测试报告中给出正确的pass或fail的结果 就可以通过try语句来很好的实现,并且能保证这个pass或fail的结果是真实的。 一、try语句 通常我们会用下面的格式: 这里当xxxx1成立时就执行else下的xxxx3语句; 当xxxx1不成立时就执行except下的xxxx2语句 不管xxxx1是否成立,fi...

u013946150的博客 741

python 中 try / except 详解和各类异常介绍

我会先把 try/except 的语法形态讲清楚,再用一组可运行的小例子演示:无异常、捕获特定异常、多个 except、else、finally、raise、以及 traceback 输出在终端里长什么样。 下面把 try / except 讲透一点:它解决的问题就一句话——把“可能会炸”的代码包起来,炸了就按你写的策略处理;不炸就继续走。

a503244552的博客 1458
上一篇: Python基础(八)—编码详解(ASCII、GBK、Unicode、UTF-8等)、decode&encode
下一篇: Python基础(十)—面向对象的深入讲解(继承、Mixin编程机制等)
luoz_python
博客等级 码龄10年 57粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值