# a[4]
try:
    '1'+ '2'
    2 / 1
except TypeError as e:
    print(e)
    print('出错了')
except ZeroDivisionError as e:
    print('除数不能为0')
except IndexError:
    print('下标错误')
except KeyError:
    print('找不到字典的key')
except FileNotFoundError:
    print('文件打不开')
except Exception as e:      # 代表捕获所有的错误信息  Exception是所有其他异常的基类
    print('出异常了',e)
else:               # try中没有出现异常,则 走到else中 如果 try中出现异常,则走except 不走else
    print('没有出异常')
finally:            # 不管是否 出现异常 都走finally:  一般 关闭文件 关闭数据库 会用到
    print('aaa')


f = open('xxx','w')
try:
    f.write()
except:   # 包含所有异常 只要有异常 都走到这个分支
    print('出问题走这块')
else:
    print('不出异常 走这个分支')
finally:
    f.close()           # 最后都执行

import traceback

def is_price(s):
    try:
        f = float(s)
    except Exception as e:
        # traceback.print_exc()    # 打印堆栈信息  很重要 很重要 很重要   不能只打印exception中信息,需要打印堆栈信息 方便问题定位
        print('zijijiade .....',traceback.format_exc())   # 异常堆栈信息 写入日志文件中   这个很重要 很重要 很重要
        return False
    else:
        if f>0:
            return True

is_price('sdgsdf')
#调用堆栈信息