Python 异常处理 day7

什么是异常?

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。

异常是Python对象,表示一个错误。

当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

异常处理

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法:

以下为简单的try....except...else的语法:

try:
<语句>        #运行别的代码
except <名字><语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

1、 try except Exception, 这种是不管发生的何种错误,都能捕获, 缺点是不能细节错误的类型

2、 try except  ValueError as e, 这种是能捕获具体的类型错误,更好的细分提示信息。

举例:写一个除法的异常处理

import traceback

a = input('除数:')
b = input('被除数:')

try:
    a = int(a)
    b = int(b)
    result = a/b
except ZeroDivisionError:#可以对python常见对异常做处理,当出现异常是会捕捉第一个异常
    print('除数不能为0')
except Exception as e:  #Exception可以代表任意异常,异常都可以被捕捉到
    print('错误信息',e)
    # print(traceback.format_exc())  # 异常具体信息,可将此写到日志中
    print('出异常了')
else:
    print('结算结果为:',result)
finally:
    print('程序已完成')#不管出错或没有出错,都会执行它,也不是必须写的

 执行结果:

(1)当被除数为0时:

Python 异常处理 day7 

(2)当除数不为整数时:

Python 异常处理 day7

举例:将连接数据库的方法做异常处理

def op_mysql(sql, many_tag=False):
    try:
        conn = pymysql.connect(host='118.24.3.40', user='jxz', password='123456',
                               db='jxz', port=3306, charset='utf8',
                               autocommit=True)
    except Exception as e:
        print('连接出错了')
    else:
        cur = conn.cursor(pymysql.cursors.DictCursor)
        try:
            cur.execute(sql)
        except Exception as e:
            print('sql语句出错了')
        else:
            if many_tag:
                result = cur.fetchall()
            else:
                result = cur.fetchone()
            return result
        finally:
            cur.close()
            conn.close()

op_mysql('sssss')#此处执行的非正确sql语句,会抛异常sql语句出错了;若连接connect中信息错误会抛连接出错异常