什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在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时:
(2)当除数不为整数时:
举例:将连接数据库的方法做异常处理
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中信息错误会抛连接出错异常