Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 613|回复: 0

python异常捕获处理

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-25 20:05:23 | 显示全部楼层 |阅读模式

    一、异常处理

    在程序运行过程中,总会遇到各种各样的错误。程序一旦出错就停止运行了,此时就需要捕捉异常,通过捕捉到的异常,我们再去做对应的处理

    写一个函数,实现除法运算

    def calc(a,b):
      return a/b

    print(calc(5,1))#调用,没有错误,结果是5.0
    >>> 5.0

    print(calc(5,0))#再次调用,这时候就不对了,因为被除数不能为0,下面报了一堆错,程序停止运行了
    >>> ZeroDivisionError: division by zero

     

    这个时候我们就需要捕捉异常了,如果除数是0的话,就提示用户传入的参数不对,重新传入。

    捕捉异常使用try....except....关键字,就是你在写代码的时候,先要考虑到这段代码可能会出现什么样的错误,然后做对应的处理,try里面就是包含你做处理的代码,except里面就是出了某种错误的时候,我怎么去处理,下面我们改下代码,捕捉异常

    def calc(a, b):
    try:
    res = a / b
    except ZeroDivisionError as e: # 如果是除数为0的错误,就返回除数不能为0,这个as e代表把返回错误的信息赋给e
    return '除数不能为0!'
    return res # 这个是如果没有这个异常的话,就返回结果

    print(calc(5, 0)) # 这样再调用就不会出来错误了,就返回除数不能为0这个了。

     

    上面就是捕捉异常,当然上面的只能捕捉到除数为0的错误,如果有别的错误就捕捉不到了;还有一个finally的用法,就是不管出不出异常都执行;try还有一个可以捕捉所有异常,还有else的用法,就是没出异常的时候怎么办,下面用代码来解释

    def calc(a, b):
    try: # 捕捉异常
    res = a / b
    except ZeroDivisionError as e:
    return '除数不能为0!'
    except KeyError as e: # 捕捉KeyError这个异常,当然这段代码没用到字典,所以不会有keyerror这个错误,我只是举个例子
    return 'keyerror错误'
    except Exception as e: # 这个是捕捉所有的异常,不管你有什么异常都可以捕捉到
    print('其他异常')
    return e # 返回错误信息
    else: # 这个else和上面的try对应的,也就是不出异常的话走这里
    print('没有出异常')
    return res
    finally: # 这个finally是不管这个段代码有没有出异常都走它
    print('出没出异常都走我这里')

    print(calc(5, 0)) # 出除数异常了,会返回除数不能为0!和执行finally里面的代码
    print(calc(5, 1)) # 这个没有出异常,就会走else里面的东西,返回结果,也会执行执行finally里面的代码
    print(calc(5, 's')) # 这个也走异常了,除数是字符串,肯定不能除,就走那个捕捉所有异常的代码了,也会执行执行finally里面的代码

     

     

    二、常见的一些异常信息
    AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
    IOError:输入/输出异常,一般是无法打开文件
    ImportError: 无法导入模块或包,一般是路径问题或名称错误
    IndentationError:代码没有正确对齐,属于语法错误
    IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3]
    KeyError:试图访问字典里不存在的键
    KeyboardInterrupt:Ctrl+C被按下
    NameError:使用一个还未被赋予对象的变量
    SyntaxError: 语法错误
    TypeError: 传入对象类型与要求的不符
    UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量
    ValueError: 传入一个调用者不期望的值,即使值的类型是正确的

     

    注:本文摘自http://www.nnzhp.cn/archives/146

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 17:26 , Processed in 0.057097 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表