zoukankan      html  css  js  c++  java
  • python学习笔记(十五)异常处理

    python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 。

    例如,我们定义一个函数

    first = input('请输入除数:')
    second = input('请输入被除数:')
    first = int(first)
    second = int(second)
    res = first/second
    li = [1,2,3,4]
    print(li[5])

    如果除数second=0,那代码就会抛异常,ZeroDivisionError: division by zero,除数是不能为0的。

    如果除数输入是字符串,那么代码也会抛异常,TypeError: unsupported operand type(s) for /: 'int' and 'str'

    这时就需要捕捉异常了,当除数为0时提示用户所传参数不对。异常处理使用的是try ....  except.....关键字。

    first = input('请输入除数:')
    second = input('请输入被除数:')
    try:
        first = int(first)
        second = int(second)
        res = first/second
    except ValueError as e: #这个e代表错误信息,如果上面的两行代码出现了 ValueError这个错
        print(e)
        print('请输入整数')
    except ZeroDivisionError as e:
        print(e)
        print('除数不能为0')

    当异常种类很多的时候,我们可以统一写为except Exception as e:

    first = input('请输入除数:')
    second = input('请输入被除数:')
    try:
        first = int(first)
        second = int(second)
        res = first/second
    except Exception as e:   #上面代码出异常的时候走这里,
        print(e)
        print('出错了。。。。。')
    else: #没有出错,也不是必须写的
    print('并没有出错')#这个是没有异常的时候走
    print(res)
    finally:#不管出错或者没有出错都会执行它,也不是必须写的。
    print('我是finally')

    现在我们完善一下操作数据库的函数

    1.数据库在连接不成功时会抛异常

    2.在执行sql的时候,如果sql语句写的不正确也会抛异常

    def my_db2(sql):
        try:
            coon = pymysql.connect( **MYSQL_INFO )
        except Exception as res:
            print('数据库连接失败了')
            return '数据库连接失败了'
        cur = coon.cursor()  # 建立游标
        try:
            cur.execute(sql)#执行sql
        except Exception as res:
            print('sql出错,sql是%s'%sql)
            return 'sql出错'
        else:
            if sql.strip()[:6].upper()=='SELECT':
                res =  cur.fetchall()
            else:
                coon.commit()
                res = 'ok'
        finally:
            cur.close()
            coon.close()
        return res
  • 相关阅读:
    POJ 3320 Jessica's Reading Problem
    引用参数和传值参数的区别
    IBM 的数据库Informix 常用代语法
    设计模式之原型模式
    UBoot中使用tftp下载文件出现错误TFTP error: 'Access violation' (2)的解决办法
    printf格式控制符的完整格式
    如何打印hostent结构体中的所有数据
    Informix 数据库客户端 dbvisualizer SQL Commander 乱码解决方案
    设计模式之模版方法模试
    nfs: server 192.168.37.200 not responding, still trying的解决办法
  • 原文地址:https://www.cnblogs.com/mululu/p/9042372.html
Copyright © 2011-2022 走看看