Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.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入门到精通教程
查看: 1000|回复: 0

[默认分类] (Python)异常处理try...except、raise

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-8-16 14:05:17 | 显示全部楼层 |阅读模式
    一、try...except
    有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError
    例子:

      
    1. a=10
    2. b=0
    3. c=a/b
    4. print "done"
    复制代码

      

    运行结果:
    Traceback (most recent call last):
    File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
    c=a/b
    ZeroDivisionError: integer division or modulo by zero
    我们发现程序因为ZeroDivisionError而中断了,语句print "done" 没有运行。为了处理异常,我们使用try...except,更改代码:

      
       
      
    1. a=10
    2. b=0
    3. try:
    4.     c=a/b
    5.     print c
    6. except ZeroDivisionError,e:
    7.     print e.message
    8. print "done"
    复制代码

       
        
      

    运行结果:
    integer division or modulo by zero
    done
    这样程序就不会因为异常而中断,从而print "done"语句正常执行。
    我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except
    处理一组异常可以这样写(其中e代表异常的实例):

    1. try:
    2.     pass
    3. except (IOError ,ZeroDivisionError),e:
    4.     print e
    复制代码


    try ....except...else 语句,当没有异常发生时,else中的语句将会被执行。
    例子:

    1. a=10
    2. b=0
    3. try:
    4.     c = b/ a
    5.     print c
    6. except (IOError ,ZeroDivisionError),x:
    7.     print x
    8. else:
    9.     print "no error"
    10. print "done"
    复制代码


    运行结果:
    0
    no error
    done
    二、raise 引发一个异常
    例子:如果输入的数据不是整数,则引发一个ValueError

    1. inputValue=input("please input a int data :")
    2. if type(inputValue)!=type(1):
    3.     raise ValueError
    4. else:
    5.     print inputValue
    复制代码


    假设输入1.2,运行结果为:
    please input a int data :1.2
    Traceback (most recent call last):
    File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
    raise ValueError
    ValueError
    如果输入1,运行结果为:
    please input a int data :1
    1
    三、try ...finally
    无论异常是否发生,在程序结束前,finally中的语句都会被执行。

    1. a=10
    2. b=0
    3. try:
    4.     print a/b
    5. finally:
    6.     print "always excute"
    复制代码


    运行结果:
    Traceback (most recent call last):
    always excute
    File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 4, in <module>
    print a/b
    ZeroDivisionError: integer division or modulo by zero
    虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。。
    finally语句也可以和except语句一起使用。

    1. a=10
    2. b=0
    3. try:
    4.     print a/b
    5. except:
    6.     print "error"
    7. finally:
    8.     print "always excute"
    复制代码


    运行结果:
    error
    always excute
    四、自定义一个异常类
    自定义一个MyException类,继承Exception。

    1. class MyException(Exception):
    2.     def __init__(self,message):
    3.         Exception.__init__(self)
    4.         self.message=message   
    复制代码


    如果输入的数字小于10,就引发一个MyException异常:

    1. a=input("please input a num:")
    2. if a<10:
    3.     try:
    4.         raise MyException("my excepition is raised ")
    5.     except MyException,e:
    6.         print e.message
    复制代码


      
    运行结果:
    please input a num:1
    my excepition is raised  
    五、python所有的标准异常类:

      
       
       异常名称
       描述
       
       
       BaseException
       所有异常的基类
       
       
       SystemExit
       解释器请求退出
       
       
       KeyboardInterrupt
       用户中断执行(通常是输入^C)
       
       
       Exception
       常规错误的基类
       
       
       StopIteration
       迭代器没有更多的值
       
       
       GeneratorExit
       生成器(generator)发生异常来通知退出
       
       
       SystemExit
       Python 解释器请求退出
       
       
       StandardError
       所有的内建标准异常的基类
       
       
       ArithmeticError
       所有数值计算错误的基类
       
       
       FloatingPointError
       浮点计算错误
       
       
       OverflowError
       数值运算超出最大限制
       
       
       ZeroDivisionError
       除(或取模)零 (所有数据类型)
       
       
       AssertionError
       断言语句失败
       
       
       AttributeError
       对象没有这个属性
       
       
       EOFError
       没有内建输入,到达EOF 标记
       
       
       EnvironmentError
       操作系统错误的基类
       
       
       IOError
       输入/输出操作失败
       
       
       OSError
       操作系统错误
       
       
       WindowsError
       系统调用失败
       
       
       ImportError
       导入模块/对象失败
       
       
       KeyboardInterrupt
       用户中断执行(通常是输入^C)
       
       
       LookupError
       无效数据查询的基类
       
       
       IndexError
       序列中没有没有此索引(index)
       
       
       KeyError
       映射中没有这个键
       
       
       MemoryError
       内存溢出错误(对于Python 解释器不是致命的)
       
       
       NameError
       未声明/初始化对象 (没有属性)
       
       
       UnboundLocalError
       访问未初始化的本地变量
       
       
       ReferenceError
       弱引用(Weak reference)试图访问已经垃圾回收了的对象
       
       
       RuntimeError
       一般的运行时错误
       
       
       NotImplementedError
       尚未实现的方法
       
       
       SyntaxError
       Python 语法错误
       
       
       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
       用户代码生成的警告
       
      

      
      
     
      
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 09:41 , Processed in 0.376710 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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