# 异常处理
# 逻辑错误 - 有可能在程序中出现,需要在代码级别进行规避
# a #NameError
# 1/num #ZeroDivisionError
# dic = {1:2} #KeyError
# dic[3]
# 语法错误 - 必须在编程的过程当中就避免
# if 1==2 #SyntaxError
# print(3)
# 迭代器
# l = [1,2,3]
# iter_l = iter(l)
# while True:
# try:
# print(next(iter_l))
# except StopIteration:
# break
# pickle
# load
# 程序中的异常 会导致什么: 程序就不再继续运行了
# 良好的容错能力,能够有效地提高用户体验,维持业务的稳定性
# num = 1
# 异常处理的语法 : 单分支与多分支
# try:
# # a #NameError
# 1/num #ZeroDivisionError
# dic = {1:2}
# dic[3] #KeyError
# print('-'*50)
# except NameError:
# print('触发 name Error 啦!')
# except ZeroDivisionError:
# print('ZeroDivisionError')
# except KeyError:
# print('KeyError')
#
# print('*'*50)
# class A:pass #AttributeError
# a = A()
# a.name
# int(input("num >>>")) # ValueError
# 3+'a' #TypeError
# 例子
# def create_teacher():print('创建老师')
# def create_class():print('创建班级')
# def create_student():print('创建学员')
# l = [('创建老师',create_teacher),
# ('创建班级',create_class),
# ('创建学员',create_student)]
# while True:
# for key,item in enumerate(l,1):
# print(key,item[0])
# try:
# num = int(input('num : '))
# l[int(num) - 1][1]()
# except ValueError:
# print('请输入一个数字')
# except IndexError:
# print('您输入的数字有误')
# if num.isdigit() and int(num) >=1 and int(num)<= 3:
# l[int(num)-1][1]()
#
# def create_teacher():
# print('创建老师')
# def create_class():print('创建班级')
# def create_student():print('创建学员')
# l = [('创建老师',create_teacher),
# ('创建班级',create_class),
# ('创建学员',create_student)]
# while True:
# for key,item in enumerate(l,1):
# print(key,item[0])
# try:
# num = int(input('num : '))
# l[int(num) - 1][1]()
# except Exception: # 万能异常
# print('您的输入有误,请输入一个有效的数字')
# def login():
# name
#
# def main():
# login()
#
# try:
# main()
# except Exception as e:
# print(e)
# logging.debug('')
# 先完成功能 在测试的时候 一边修改代码 一边加上异常处理
# 只要加上异常处理,一定要写日志,不要在大段的代码外直接套上异常处理
# 应该是在具体的逻辑上(具体的细节处的代码段)加上细粒度异常处理
# 对于可以预料到的异常 一定要尽力的疏导 如果不能解决 必须要写上提示以及引发错误的原因
# 万能异常 as语句
# 万能异常 配合多分支 : 万能异常必须写在所有分支异常之后
# 优先处理一些能预料到的错误类型,一些预料不到的错误类型应该被最终的万能异常捕获
# def create_teacher():
# dic = {'egon':['male',40],'alex':['female',83]}
# print('创建老师')
# dic['peiqi']
# def create_class():print('创建班级')
# def create_student():print('创建学员')
# l = [('创建老师',create_teacher),
# ('创建班级',create_class),
# ('创建学员',create_student)]
# while True:
# for key,item in enumerate(l,1):
# print(key,item[0])
# try:
# num = int(input('num : '))
# l[int(num) - 1][1]()
# except IndexError:
# print('您输入的数字不合法')
# except ValueError:
# print('请您输入一个合法的数字')
# except Exception as e: # 万能异常
# print('您的代码逻辑有问题')
# print(e)
# except ValueError IndexError Exception
# tey__ else
# def create_teacher():print('创建老师')
# def create_class():print('创建班级')
# def create_student():print('创建学员')
# l = [('创建老师',create_teacher),
# ('创建班级',create_class),
# ('创建学员',create_student),]
# # ('创建学校',)]
# try:
# '''发短信'''
# for i in l:
# i[1]()
# except IndexError as e:
# print(e)
# else:
# # '当try语句中的代码没有异常,
# # 被完整的执行完,就执行else中的代码'
# print('*********')
# try_finally 和 主动抛异常, 断言
# try:
# f = open('file1')
# for line in f:
# line
# except Exception as e:
# print(e)
# finally:
# '''不管try语句中的代码是否报错,都会执行finally分支中的代码'''
# print('finally 被执行了')
# f.close()
# def func():
# try:
# return 1
# finally:
# print('1234')
# ret = func()
# print(ret)
# 当 finally 遇到return的时候
# finally仍然执行
# def dealwith_file():
# try:
# f = open('file1',encoding='utf-8')
# for line in f:
# int(line)
# return True
# except Exception as e:
# print(e)
# return False
# finally:
# '''不管try语句中的代码是否报错,都会执行finally分支中的代码'''
# '''去完成一些连接操作的收尾工作'''
# print('finally 被执行了')
# f.close()
#
# ret = dealwith_file()
# print(ret)
# try:
# # 可能发生异常的代码
# except 异常类型1 as 变量名:
# print(变量名) # 变量名存储的是具体的错误信息
# except 异常类型2 as 变量名:
# print(变量名) # 变量名存储的是具体的错误信息
# except Exception as 变量名:
# print(变量名) # 变量名存储的是具体的错误信息
# else:
# print('如果以上代码没有发生异常以及异常处理工作就执行这里的代码')
# print('一般情况下else中的代码用来下结论')
# # logging模块
# finally:
# print('不管代码是否有异常都会执行,且在函数中遇到return仍然会执行')
# print('一般情况下用于这个函数中资源的回收')
# raise NameError
# raise NameError('aaaa')
# print('')
# class MyError(BaseException):
# def __init__(self,msg="Eva's error" ):
# self.msg = msg
# def __str__(self):
# return self.msg
# raise MyError
# try:
# raise MyError('我自己定制的异常')
# except MyError as e:
# print(e)
# error_obj = MyError('是一个变量定义错误')
# print(error_obj)
# raise MyError()
# raise error_obj
# assert 1==2 # 条件判断
# if 1==2:print('')
# print(123)
# 只负责处理一个文件 文件路径
# file = 'file1'
# import os
# assert os.path.isfile(file) # 断言
# print(1223333)