• python -- 程序异常与调试(异常处理)


    一、异常处理

    针对在运行时可能会出错的语句块,可以提前设计好出现问题后的解决方案,

    或者给出相应的提示信息。使用try…except语句来处理Python抛出的异常:

    # -----------------------------------------
    # 异常捕获
    # -----------------------------------------
    # 在except语句中使用pass语句,忽略发生的异常
    list1 = ['100', '200', '三百', '四百', '500']
    total = 0
    for e in list1:
    try:
    total = total + int(e)
    except:
    pass
    print(total)

    # 文件不存在
    try:
    file = open("config.txt", "r")
    except FileNotFoundError:
    print("文件不存在!")


    # 用户按下Ctrl+C组合键时抛出键盘中断异常
    pwd = 888 # 用户密码
    num = -1 # 输入密码
    times = 0 # 密码输入的错误次数
    while num != pwd:
    try:
    num = int(input("请输入三位数字的密码:"))
    except ValueError:
    print("请确认输入的是数字!")
    continue
    except: # 万能异常捕获
    print("退出")
    break

    if num != pwd:
    print("密码错误!")
    times += 1
    if times >= 3:
    print("密码错误超过3次,请明天再试!")
    break
    else:
    continue
    else:
    print("密码正确!")
    else:
    print("登录成功!")


    # 使用raise主动抛出异常
    def zero_div():
    x = 100
    y = 0
    if y == 0:
    # 一旦抛出异常,且未做相应的异常捕获,程序会就此退出。
    raise ZeroDivisionError("除数不能为0!")
    z = x / y
    print(z)


    # zero_div()
    try:
    zero_div()
    except ZeroDivisionError:
    print("捕获到一个ZeroDivisionError异常!")
    else: #只有try为正常情况,才会执行else语句
    print("test1")
    finally: #不管是正常还是异常都会执行该语句
    print("test2")

    # 如果抛出一个SystemExit异常会强制结束Python解释器的运行
    raise SystemExit


    # -----------------------------------------
    # 自定义异常
    # -----------------------------------------
    class ExitLoop(Exception):
    pass


    try:
    x = 1
    while x < 5:
    for y in range(1, 5):
    print(x, y)

    if (x == 3) and (y == 3):
    # 通过抛出一个异常,直接跳出多层嵌套循环
    raise ExitLoop

    x += 1
    except ExitLoop:
    print("当x = 3, y = 3时跳出嵌套循环")


    class CustomError(Exception):
    def __init__(self, err='自定义错误'):
    Exception.__init__(self, err)


    raise CustomError
  • 相关阅读:
    LintCode-174.删除链表中倒数第n个节点
    LintCode-165.合并两个排序链表
    LintCode-371.用递归打印数字
    LintCode-140.快速幂
    LintCode-373.奇偶分割数组
    NOI 2015 品酒大会 (后缀数组+并查集)
    NOI 2016 优秀的拆分 (后缀数组+差分)
    POJ 2774 Long Long Message (后缀数组+二分)
    BZOJ 1717 [USACO06DEC] Milk Patterns (后缀数组+二分)
    POJ 1743 [USACO5.1] Musical Theme (后缀数组+二分)
  • 原文地址:https://www.cnblogs.com/Teachertao/p/11223235.html
Copyright © 2020-2023  润新知