#代码出现异常就不会往下走了
import pymysql
import traceback


l=[1,2,3]
try: #关键字
result= l[3] #有可能出现异常的代码写到try里面
except IndexError: #捕捉这个异常
print("代码执行出错,取不到你指定的下标") #出错了走这个,出错执行,写在try里面
else:
print(result) #正常执行走到这里,不出错执行


l=[1,2,3]
try:
r=1/0
except IndexError as e: #as e 错误的信息
print("代码执行出错,取不到你指定的下标")
print(e)
except ZeroDivisionError as e:
print("除数不能为零",e)
else:
print(result)

except Exception as e:#捕捉所有异常
traceback.print_exc() #打印异常的堆栈信息,需要引用模块
traceback.format_exc()#这个方法返回了错误信息
finally: #不管出没出错都会执行 finally里面的代码
print("finally")#不管出没出错都会执行 finally里面的代码

def execute_sql(sql,all=True,cur_type=1):
#cur_type如果是1,那么返回的是list
#如果是2,那么返回的字典
try:
connect = pymysql.connect(**mysql_info)
except Exception:
print("连接mysql出现异常!请检查账号/密码或者mysql是否可以连接")
traceback.print_exc() #打印异常的堆栈信息
quit()
cur = connect.cursor() if cur_type == 1 else connect.cursor(pymysql.cursors.DictCursor)
try:
cur.execute(sql)
except Exception:
print(f"sql不正确,请检查sql,你的sql{sql}")
else:
if all:
result = cur.fetchall()
else:
result = cur.fetchone()
return result
finally:#不管出没出错都会执行 finally里面的代码
cur.close()
connect.close()


#练习 函数判断小数

def is_float(val): #传一个变量进来
val = str(val) #转换成s类型
if val.isdigit():#判断它是整数,直接返回
return False
try:
float(val) #出错了,转不成float,肯定不是小数
except:
return False
return True