'''异常处理的其它内容''' # 异常其它结构try-else # s = '123' # try: # int(s) # ①执行try代码块,成功无异常 # except Exception as e: # print(e) # else: # 此处的else,是当try代码块没异常的情况下才执行;如果try代码块有异常那就是执行except # print('try执行完就执行else了') # ②执行else代码块,进行打印 # 异常其它结构try-finally # s1 = 'qwe' # try: # 有异常的情况 # int(s1) # ①执行try代码块且出现异常 # except Exception as e: # print(e) # ②触发万能异常并打印invalid literal for int() with base 10: 'qwe';如果捕捉异常不成功依旧会报错 # else: # print('是否执行呢?') # finally: # print('我是最后一步执行,通常是进行清理工作') # ③无论try代码块是否有异常及except是否成功捕捉到异常,最后都会执行finally代码块,打印我是最后一步执行 # s2 = '999' # try: # 无异常的情况 # int(s2) # ①执行try代码块且出现异常 # except Exception as e: # print(e) # else: # print('是否执行呢?') # ②try代码块执行成功无异常,那么执行else代码块 # finally: # print('我是最后一步执行,通常是进行清理工作') # ③无论try代码块是否有异常及except是否成功捕捉到异常,最后都会执行finally代码块,打印我是最后一步执行 # 主动触发异常raise # try: # raise TypeError('类型错误') # # except Exception as e: # print(e) # 自定义异常(继承BaseException类) # class EgonException(BaseException): # Exception继承的就是BaseException # def __init__(self, msg): # self.msg = msg # raise EgonException('自定制异常') # 当没有继承BaseException类时,报异常TypeError: exceptions must derive from BaseException # print(EgonException('依旧自定制异常')) # 打印 依旧自定制异常,所以不需要自写__str__了 # 断言(assert),和if相似,但更简洁 # res = 1 # assert res == 1 # 如果等于,那么可以执行后续的代码 # print('assert正确') # assert res == 2 # 如果不等于,那么不执行后续的代码;报错:AssertionError # print('assert错误') # 此步操作不打印 # # res1 = 1 # if res1 != 2: # raise AssertionError # print('if判断不等于则执行打印') # if res1 == 2: # raise AssertionError # print('if判断等于则不运行') # try-except的方式比较if的方式的好处 # try-except这种异常机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性;异常处理中为每一个异常定制了异常类型(python中 # 统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需写多个if判断式)减少了代码,增强了可读性 # 什么时候用异常处理 # try-except应该尽量少用,因为它本身就是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的;这种东西加多了,会导致你的代码 # 可读性变差;只有在有些异常无法预知的情况下,才应该加上try-except,其它的逻辑错误应该尽量修正
异常处理的其它内容
while True:
print('studying...')