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

    一、异常

    有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError

    异常例子:

    res=5/0
    print(res)
    #运行报错
    #ZeroDivisionError: division by zero

    字符串与整型不能相加异常:

    import random
    guess=random.randint(10,20)
    num=input('请输入一个数字:')
    print(num+guess)
    
    # 请输入一个数字:6
    # Traceback (most recent call last):
    #   File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 6, in <module>
    #     print(num+guess)
    # TypeError: Can't convert 'int' object to str implicitly

    英文字符串转整型异常:

    d={'price':20}
    price=input('请输入一个数字:')
    d['price']-=int(price)
    print(d)
    
    # D:SystemPython3python.exe F:/自动化学习/课堂练习/day8/new_api/异常处理.py
    # 请输入一个数字:ert
    # Traceback (most recent call last):
    #   File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 16, in <module>
    #     d['price']-=int(price)
    # ValueError: invalid literal for int() with base 10: 'ert'

    下标越界异常:

    li=[1,2,3,4,5]
    print(li[9])
    # Traceback (most recent call last):
    #   File "F:/自动化学习/课堂练习/day8/new_api/异常处理.py", line 27, in <module>
    #     print(li[9])
    # IndexError: list index out of range

    二、异常处理

    1、当代码中运行可能会遇到异常时,可以用try ... except  例如输入的值异常时:可以try ..except ValueError as e:

    first=input('请输入除数')
    second=input('请输入被除数')
    #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
    try:
        first=int(first)
        second=int(second)
        res=first/second
        print(res)
    #except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError
    except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里
        print(e)
        print('请输入整数')
    else:#没有出错,这个是没有异常时候走,不是必须写的
        print(res)
    
    #结果:
    请输入除数f
    请输入被除数2
    invalid literal for int() with base 10: 'f'

    2、多个异常可以:try...excepy...excepy,例如输入的值异常、被除数不能为0异常时:可以try ...except ValueError as e:...exceptZeroDivisionErroras e:

    first=input('请输入除数')
    second=input('请输入被除数')
    #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
    try:
        first=int(first)
        second=int(second)
        res=first/second
        print(res)
    #except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError
    except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里
        print(e)
        print('请输入整数')
    except ZeroDivisionError as e:
        print(e)
        print('除数不能为0')
    else:#没有出错,这个是没有异常时候走,不是必须写的
        print(res)
    
    #结果:请输入除数12
    请输入被除数0
    division by zero
    除数不能为0

    3、当多个异常可以只用一个try ...except Exception as e:

    first=input('请输入除数')
    second=input('请输入被除数')
    #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
    try:
        first=int(first)
        second=int(second)
        res=first/second
    except Exception as e:
        print(e)
    else:#没有出错,这个是没有异常时候走,不是必须写的
        print(res)
    #结果:
    请输入除数qw
    请输入被除数g
    invalid literal for int() with base 10: 'qw'

    4、finally:不管出错或者没有出错都会执行它,这个不是必须写的。

    一般要写的情况有:例如操作数据库成功或者失败,都要关闭数据库

    first=input('请输入除数')
    second=input('请输入被除数')
    #用户的输入不可预测,可能会输入英文等非法字符,所以在可能出错的代码前用try,尝试运行该代码是否有异常
    try:
        first=int(first)
        second=int(second)
        res=first/second
        print(res)
    #except 则是出错错误会怎么办,因为这个报错是ValueError,所以写ValueError
    # except ValueError as e:#e 代表错误信息,如果上面的两行代码出现了ValueError这个错误则走这里
    #     print(e)
    #     print('请输入整数')
    # except ZeroDivisionError as e:
    #     print(e)
    #     print('除数不能为0')
    except Exception as e:
        print(e)
    else:#没有出错,这个是没有异常时候走,不是必须写的
        print(res)
    finally:#不管出错或者没有出错都会执行它,不是必须写的。要写的情况:例如操作数据库成功或者失败,都要关闭数据库
        print('我是finally')
  • 相关阅读:
    BZOJ1042: [HAOI2008]硬币购物
    BZOJ1089: [SCOI2003]严格n元树
    BZOJ1060: [ZJOI2007]时态同步
    BZOJ2697: 特技飞行
    BZOJ2464: 中山市选[2009]小明的游戏
    BZOJ1430: 小猴打架
    BZOJ3675: [Apio2014]序列分割
    BZOJ2453: 维护队列
    BZOJ2120: 数颜色
    BZOJ4547: Hdu5171 小奇的集合
  • 原文地址:https://www.cnblogs.com/hwtfamily/p/9085368.html
Copyright © 2011-2022 走看看