首页 > 其他分享 >异常

异常

时间:2022-12-15 00:44:53浏览次数:36  
标签:捕获 except len try print 异常

一、了解异常

  当检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”。

二、异常的写法

  2.1 语法

    try:

      可能发生错误的代码

    except:

      如果出现异常执行的代码

  2.2 体验

# 需求:尝试打开test.txt  (r) , 如果文件不存在,只写方式打开w
"""
try:
    可能发生错误的代码
except:
    发生错误的时候执行的代码
"""

try:
    f = open('test.txt', 'r')
except:
    f = open('test.txt', 'w')

  2.3 捕获指定异常

  2.3.1 语法

    try:

      可能发生错误的代码

    except 异常类型:

      如果捕获到该异常类型执行的代码

 

 

   2.3.2 体验

# 需求: 尝试执行打印num,捕获异常类型NameError,如果捕获到这个异常类型,执行打印:有错误
try:
    # print(num)
    print(1/0)
except NameError:  
    # # ZeroDivisionError报错
    print('有错误')

  注意:

    1. 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。

    2. 一般try下方只放一行尝试执行的代码。

  2.3.3 捕获多个指定异常

  当捕获多个异常时,可以把要捕获的异常类型的名字  放到except后,并使用元组的方式进行书写。

try:
    print(1/0)
except(NameError, ZeroDivisionError):
    print('有错误')

   2.3.4 捕获异常描述信息

try:
    print(1/0)
except(NameError, ZeroDivisionError) as AA:
    # division by zero
    print(AA)

  注意:as后面跟一个变量,用来存储捕获的异常描述信息。

  2.3.5 捕获所有异常

  Exception是所有程序异常类的父类。

# 尝试执行打印num,捕获exception 打印异常描述信息
try:
    print(num)
except Exception as result:
    # name 'num' is not defined
    print(result)

  2.4 异常的else

  else表示的是如果没有异常要执行的代码。

try:
    print(1)
except Exception as result:
    print(result)
else:
    print('else,没有异常的时候要执行的代码')

  2.5 异常的finally

  finally表示的是无论是否异常都要执行的代码,列如关闭文件。

# 需求:尝试以r打开文件,如果有异常以w打开这个文件,最后关闭文件
try:
    f = open('text10.txt', 'r')
except Exception as e:
    f = open('text10.txt', 'w')
else:
    print('没有异常')
finally:
    f.close()

三、异常的传递

 

# 需求1:尝试只读打开test.txt 文件存在读取内容,不存在提示用户。
# 需求2:读取内容:循环读取,当无内容的时候退出循环,如果用户意外终止,提示用户已经被意外终止。
import time
try:
    f = open('test.txt')
    # 尝试循环读取内容
    try:
        while True:
            con = f.readline()
            # 如果读取完成退出循环
            if len(con) == 0:
                break

            # 停顿3秒在打印下一个
            time.sleep(3)
            print(con)
    except:
        # 在命令提示符中如果按下ctrl+C 结束终止的键
        print('程序被意外终止')

except:
    print('该文件不存在')

 

  按ctrl+C的结果

 

 四、自定义异常

  在python中,抛出自定义异常的语法为raise异常类对象。

  需求:密码长度不足,则报异常(用户输入密码,如果输入的长度不足6位,则报错,即抛出自定义异常,并捕获该异常)。

# 1. 自定义异常,继承Exception。 魔法方法有init(初始化属性)和str(设置异常描述信息)
class ShortInputError(Exception):
    def __init__(self, length, min_len):
        # 用户输入的密码长度
        self.length = length
        # 系统要求的最少长度
        self.min_len = min_len

    def __str__(self):
        return f'您输入的密码长度时{self.length}, 密码长度不能少于{self.min_len}'

def main():
    # 2. 抛出异常: 用户输入密码,如果长度小于6,抛出异常
    try:
        password = input('请输入密码:')
        if len(password) < 6:
            # 抛出异常类创建的对象
            raise ShortInputError(len(password), 6)

    # 3. 捕获该异常
    except Exception as result:
        print(result)
    else:
        print('密码输入完成,符合要求')

main()

 

标签:捕获,except,len,try,print,异常
From: https://www.cnblogs.com/yz-b/p/16964903.html

相关文章

  • 缺页异常
     程序存储在disk,在32位系统下,虚拟地址空间最大4G,但是不是每个地址都存储程序片段。上图左侧是一整个虚拟地址空间,没有程序片段的地址空间称为Unallocated;有程序片段,并且......
  • ogg目标库应用进程异常,告警OGG-00519、ORA-02443
    问题描述:ogg目标库应用进程异常,告警OGG-00519、ORA-02443,如下所示:场景说明:源端表中存在一个约束,约束名为系统自定义,该约束在目标端未能查找,所以便在源库将其删除,结果就出现......
  • spring mvc环境之异常错误码的统一返回(十五)
    1.根据不同的请求方式,返回页面或json数据1).创建统一权限异常处理类,所有的权限异常走一个端口2).根据请求方式不同返回不同数据,页面请求返回403未授权页面,ajax请......
  • 记一次节点被mysql锁定的异常处理
    参考:https://blog.csdn.net/weixin_34293141/article/details/93057113同事反馈公司的一个java客户端工具运行异常,后台log如下:2022-12-0810:52:28WARNBasicResourc......
  • C++ 捕获程序异常奔溃minidump
    文章目录​​1、简介​​​​1.1MiniDumpWriteDump函数​​​​1.2VisualStudio分析小型转储​​​​1.3使用Microsoft公共符号服务器​​​​1.4使用WinDbg调试小......
  • @Order和Ordered在gateway中的异常情况
    使用场景多个过滤器时,确定执行的先后顺序.注意是过滤器执行的先后顺序,不是加载的先后顺序值越小,越先执行@ComponentpublicclassGlobalLogFilterimplementsGloba......
  • System.AccessViolationException 异常
    winfrom的程序遇到System.AccessViolationException 异常后提示异常后自动关闭了,后期在异常点使用try...catch未捕获到异常。最后查询资料发现是:在.NET4.0之后,CLR将会......
  • 【异常】git报错refusing to merge unrelated histories 解决方案
    【异常】git报错refusingtomergeunrelatedhistories解决方案增加这个选项​​--allow-unrelated-history​​选项来解决问题(该选项可以合并两个独立启动仓库的历史)git......
  • JedisPool异常:Could not get a resource from the pool
    JedisConnectionException:Couldnotgetaresourcefromthepool -------无法从连接池中获取到连接(资源)。具体原因主要看CausedBy子句。 下面Causedby可知,在调......
  • 深度之眼(十四)——Python:文件、异常和模块
    文章目录​​零、导读​​​​8.1文件读写​​​​8.1.1文件的打开​​​​8.1.2文件的读取​​​​8.1.3文件的写入​​​​8.1.4既读又写​​​​8.1.5数据的存储与......