程序运行过程中经常报错,为了知道程序的报错信息,我们可以捕捉异常
price=input("请输入价格:")
try:
new_price=int(price)/0 #try包进去要执行代码
except Exception as e:#如果try中代码出错,才走exception
print(e)
else:#如果没有出异常,走这里
finally:
print('finallly')#不论有无异常,都可以走到这里
else和finally不是必须有的。
至少try和except这俩是要有
def conn_mysql(sql):
import pymysql
try:
conn = pymysql.connect(host=MYSQL_HOST,user=USER,password=PASSWORD,db=DB,charset='utf8',port=MYSQL_PORT)
except Exception as e:
print('mysql连接出错,错误信息为%s'%e)
res = {"code":5,"msg":'mysql连接出错,错误信息为%s'%e}
else:
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
try:
cur.execute(sql)
except Exception as e:
msg = "sql执行出错,请检查sql,错误信息为:%s"%e
res = {"code":5,"msg":msg}
else:
res = cur.fetchone()
conn.commit()
finally:
cur.close()
conn.close()
return res
raise主动抛出异常
# raise 主动抛出异常
price=input("请输入价格:")
if price.isdigit(): #如果输入的价格是数字,就pass
pass
else:
raise ValueError#如果输入的价格不是数字,就报错
二,经常遇到的异常信息
AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError:输入/输出异常,一般是无法打开文件
ImportError: 无法导入模块或包,一般是路径问题或名称错误
IndentationError:代码没有正确对齐,属于语法错误
IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3]
KeyError:试图访问字典里不存在的键
KeyboardInterrupt:Ctrl+C被按下
NameError:使用一个还未被赋予对象的变量
SyntaxError: 语法错误
TypeError: 传入对象类型与要求的不符
UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量
ValueError: 传入一个调用者不期望的值,即使值的类型是正确的