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

    异常:程序出现了意想不到的情况

    如果异常不解决,程序会崩溃,停止运行

    捕获异常,如果出现了异常,我们会让他们按照事先规定的规则去执行对应的操作(记录操作日志)

    一、语法

    try (要运行的有可能发生异常的代码):

                代码

    except (异常):

                出现异常的时候要运行的代码(执行的操作),记录日志

    # 一旦try当中的代码报错,会立即跳到except,下面的代码不会继续执行

    str_1 = ['python'] try: print(str_1 [8])    print("是否会执行?") except: print('记录错误日志') print("代码完成") ''' 结果: 记录错误日志 代码完成 '''
    # 如果try里面的代码没有出现异常,就不会执行except
    
    str_1 = ['python']
    try:
        print(str_1 [1])
       print("是否会执行?")
    except: 
        print('记录错误日志') 
    print("代码完成") 
    
    ''' 
    结果: 
    y
    是否会执行?
    代码完成 
    '''

    好的程序员:知道什么代码需要放到try里面

    a=4
    b=1
    print(a*b)   #需不需要加异常处理?
    
    a='a'
    b='b'
    print(a*b)   #如果事先不知道传入的是什么类型,则需要加异常处理
    
    try:
        print(a*b)
    except:
        print('参数错误,记录日志')

    try里面的语句调换顺序,报的错误就会不一样

    同一个try不可能捕获两个异常的,如果遇到一个异常就直接执行except语句了

    二、异常捕获的进阶版

    指明出现的异常类型(先不要加异常,让他报错,将报错的类型记住,去异常捕获的时候,加入except语句中)

    lst=['zjx']
    try:
        print(4/0)
        lst[3]
    except IndexError as e:
        print('出现异常:{}'.format(e))
    except ZeroDivisionError as e:
        print('出现除法错误:{}'.format(e))
    finally:
        #不管有没有报错,finally都会执行的
        print('hello world')

    三、raise

    手动抛出异常,让程序报错

    def join_team(age,gender):
        if age > 22:
            raise ValueError('年龄要小于22')
        print('可以加入team')
    
    print(join_team(23,'girl'))
    
    '''
    结果:
    ValueError: 年龄要小于22
    '''

     

    四、常见的异常类型:

    ImportError:无法引入模块或包

    IndexError:下标索引超出序列边界

    NameError:使用一个还未赋予对象的变量

    SynataxError:代码逻辑语法出错,不能执行,不能去捕获

    TypeError:传入的对象类型与要求不符

    ValueError:传入一个不被期望的值,即使类型正确

    KeyError:试图访问你字典里不存在的键

    IOError:输入输出异常,文件操作

    1)SyntaxError:语法错误

    try:
        ldljsdjlg'khkhkh'
    except:
        print('语法错误')
    
    #结果显示错误,不能捕获异常
    '''
        ldljsdjlg'khkhkh'
                        ^
    SyntaxError: invalid syntax
    '''

    2)KeyError

    dict1 = {'1':'zjx','2':'hauhau'}
    print(dict1['3'])
    
    '''    print(dict1['3'])
    KeyError: '3'
    '''

    3)IndexError

    lst1 = [1,2,3,4,5]
    print(lst1[5])
    
    '''    print(lst1[5])
    IndexError: list index out of range
    '''

    五、异常分组

    发现了一个严重级别,阻塞级别的bug(短信通知相关人员赶紧集合的代码),一个轻微级别的bug(记录日志的代码)
    针对不同的组进行不同的操作

    try:
        1 / 0
        ['hello'][3]
        {'name':'pyrhon'}['age']
    except (IndexError,KeyError) as  e:
        '短信通知这里出现很严重的问题'
        print('可以捕获IndexError和KeyError')
    except ZeroDivisionError as e:
        '记录日志'
        print('除法出现异常{}'.format(e))
  • 相关阅读:
    P1171 售货员的难题--搜索(剪枝)
    逆元-P3811 【模板】乘法逆元-洛谷luogu
    gcd和exgcd和lcm
    递推
    Docker hello workd
    Docker配置文件详解
    Centos7变动
    centos7安装docker
    nginx性能调优
    nginx相关
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13634469.html
Copyright © 2011-2022 走看看