'''异常处理的其它内容'''
# 异常其它结构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,其它的逻辑错误应该尽量修正