异常处理
#try----else---- 会一起执行 #finally无论如何,最后都会执行 def main(): try: res = 10/2 print("开始执行计算:",res) except ZeroDivisionError as z: print("代码执行有误:",z) # except TypeError as z: # print("代码执行有误:",z) else: print("else被执行了====") finally: #不管前面如何,finally一定会执行! print("不管是否计算,程序已经执行完毕!") if __name__ == '__main__': main()
如果try失败,else也不会执行,except会执行。
代码执行有误: division by zero
不管是否计算,程序已经执行完毕!
多个异常处理
def main(): print("=======开始计算========") try: num = int(input("请输入数字:")) num2 = int(input("请输入数字:")) res = num / num2 print("计算结果为:",res) except ZeroDivisionError as z: print("被除数不能为 0:", z) except ValueError as v: print("你输入的不是数字:", v) finally: print("=======执行完毕=======") if __name__ == '__main__': main() """ =======开始计算======== 请输入数字:32 请输入数字:23 计算结果为: 1.391304347826087 =======执行完毕======= """
异常统一处理
#异常之间是,继承的关系,所有的异常,父类异常是:Exception #当不知道会出现何种异常的时候,可以使用traceback import traceback def main(): print("=======开始计算========") try: num = int(input("请输入数字:")) num2 = int(input("请输入数字:")) res = num / num2 print("计算结果为:",res) except Exception as z: print("Exception正在处理:", z) """ except Exception as z: print("Exception正在处理:", traceback.format_exc()) """ finally: print("=======执行完毕=======") if __name__ == '__main__': main()
Exception正在处理: invalid literal for int() with base 10: 'dd'
Exception正在处理: division by zero
File "E:/code/hunjia_16/day07_0820/yichang/traceback_yichang.py", line 6, in main
num = int(input("请输入数字:"))
ValueError: invalid literal for int() with base 10: 'ddf'
抛出异常raise
def main(): print("=======开始====================") try: raise NameError("【raise-Name异常】应该是输入的名字有误。") except Exception as e: print("这是Exception输出:", e) print("=====下面是traceback异常演示=====") print(traceback.format_exc()) main() """ =======开始==================== 这是Exception输出: 【raise-Name异常】应该是输入的名字有误。 =====下面是traceback异常演示===== Traceback (most recent call last): File "E:/code/hunjia_16/day07_0820/yichang/raise_yichang.py", line 16, in main raise NameError("【raise-Name异常】应该是输入的名字有误。") NameError: 【raise-Name异常】应该是输入的名字有误。 """
# 继承中的,子类继承父类的方法,父类抛出异常 class Message: def build(self): #如果使用父类的build方法,会报错 raise NotImplementedError("【Message类】build方法,正在使用。") class Me(Message): def build(self): print("【Me子类】build方法,已经覆写。") if __name__ == '__main__': m1 = Message() m1.build() """ File "E:/code/hunjia_16/day07_0820/yichang/raise_lei_jicheng.py", line 3, in build raise NotImplementedError("【Message类】build方法,正在使用。") NotImplementedError: 【Message类】build方法,正在使用。 """
def fun(): try: raise NameError("【NameError】名称可能异常。") except Exception as e: print("【Exception】你的代码出bug啦。") raise TypeError("TypeError:可能是类型错误。") from e # raise TypeError("TypeError:可能是类型错误。") from None # from None就找不到源头 if __name__ == '__main__': try: fun() except Exception as e: #抛出异常原因 print("Exception-main{}:运行程序,出现异常原因为:{}".format(e, e.__cause__)) """ 【Exception】你的代码出bug啦。 Exception-mainTypeError:可能是类型错误。:运行程序,出现异常原因为:【NameError】名称可能异常。
#from None的执行结果如下 Exception-mainTypeError:可能是类型错误。:运行程序,出现异常原因为:None """