zoukankan      html  css  js  c++  java
  • 异常处理

    异常处理

    错误

    -语法错误

    -逻辑错误

     

    异常

    异常就是程序运行错误时发出的信号

    异常处理:

    1,if 可以进行异常处理,但是有一下缺点:

    -重读代码

    -可读性差

    2,try   except 处理异常

     

    try:

      被检测的代码块

    except 异常类型:

       try中一旦检测到异常,执行到这个位置的逻辑

     

    try:
    age = input('1==>:')
    int(age)

    num2 = input('2===>:')
    int(num2)
    except ValueError as e:
    print(e)
    print('1')
     

    运行后:

    1==>:1 #输入1,符合逻辑会继续执行下边代码
    2===>:sw #不符合逻辑,会直接跳到异常处理except 处进行,执行完毕会跳出异常处理继续执行下边代码
    invalid literal for int() with base 10: 'sw'

    1

    -异常类只能用来处理指定的异常情况,如果非指定异常则无法处理.未捕捉到异常,程序直接报错

    -多分枝:碰到指定异常直接处理,处理完毕直接跳出异常执行下边代码

    try:
    age = input('1==>:')
    int(age)

    num2 = input('2===>:')
    int(num2)

    l = []
    l[10000]

    except ValueError as e:
    print(e)
    except IndexError as e:
    print(e)

    print('11111')

    1==>:1
    2===>:2
    list index out of range
    11111

    -万能异常 Exception,碰到有异常就直接处理

    try:
    age = input('1==>:')
    int(age)

    num2 = input('2===>:')
    int(num2)

    l = []
    l[10000]

    except Exception as e:
    print(e)

    print('11111')

    1==>:we #异常
    invalid literal for int() with base 10: 'we'#处理异常
    11111

    **********************

    -else 异常处理中的else代表代码无异常会输出else的代码

    try:
    age = input('1==>:')
    int(age)

    except ValueError as e:
    print(e)
    except Exception as e:
    print(e)
    else:#代码无异常会输出else
    print('代码无异常')

    print('11111')

    1==>:1
    代码无异常
    11111

    *****************

    -finally 在处理异常中,无论代码是否有异常都会执行finally模块代码,通常是用于清理工作。如下:

    try:
    age = input('1==>:')
    int(age)

    except Exception as e:
    print(e)
    else:
    print('代码无异常')
    finally:
    print('无论是否有异常,都会执行此模块,通常是进行清理工作')

    print('11111')

    /usr/local/bin/python3.7 /Users/chen/PycharmProjects/untitled1/day23/test.py
    1==>:de
    invalid literal for int() with base 10: 'de'
    无论是否有异常,都会执行此模块,通常是进行清理工作
    11111

    *************************

    1==>:1
    代码无异常
    无论是否有异常,都会执行此模块,通常是进行清理工作
    11111

     

    自定义异常

    自定义异常:代码如下:

    class 异常名(异常基类): #此处的异常基类:比如 BaseException,Exception, LookupError等等。

     

      def __init__(self,msg):

        self.msg =msg

    例如:输入的字符串,不会报错,不是字符串格式,会报错,代码如下:

    class Egonexception(BaseException):
    def __init__(self,msg):
    self.msg = msg

    def __str__(self):
    return self.msg

    try:
    raise Egonexception('23')
    except Egonexception as e:
    print(e)#=====》结果是23 因为输入的'23'是字符串格式.

    断言

    assert 条件

     assert 报错,下边的代码不执行。

    s=4
    print('====>')
    assert s==4 #此代码相当于以下2行if代码:
    #if s !=4:
    #raise AssertionError

    print('====>')
    结果是:

    ====>
    ====>

    ******************

    若s =5

    s=5
    print('====>')
    assert s==4
    print('====>')

    结果是:

    ====>

    AssertionError #报错程序无法继续往下运行

     

     

    使用try...except 的方式优点:

    1,把错误处理和真正的工作分开来

    2,代码更容易组织,更清晰,复杂的工作任务更容易实现

    3,更安全了,不至于由于一些小的疏忽而使程序意外崩溃。

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    语音激活检测(VAD)--前向神经网络方法(Alex)
    语音信号处理基础
    MySQL死锁系列-插入语句正常,但是没有插入成功
    关于wx.getProfile和wx.login获取解密数据偶发失败的原因
    指针访问数组元素
    libev 源码解析
    leveldb 源码--总体架构分析
    raft--分布式一致性协议
    使用springcloud gateway搭建网关(分流,限流,熔断)
    爬虫
  • 原文地址:https://www.cnblogs.com/wode110/p/14875448.html
Copyright © 2011-2022 走看看