python自定义异常类型和raise抛出异常

港控/mmm° 2022-05-16 08:00 400阅读 0赞
  1. 实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。

1.自定义异常类型

  1. #1.用户自定义异常类型,只要该类继承了Exception类即可,至于类的主题内容用户自定义,可参考官方异常类
  2. class TooLongExceptin(Exception):
  3. "this is user's Exception for check the length of name "
  4. def __init__(self,leng):
  5. self.leng = leng
  6. def __str__(self):
  7. print("姓名长度是"+str(self.leng)+",超过长度了")

2.如何手动抛出异常:raise

系统的自带的异常只要触发会自动抛出,比如NameError,但用户自定义的异常需要用户自己决定什么时候抛出。
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。**
大多数的异常的名字都以”Error”结尾,所以实际命名时尽量跟标准的异常命名一样。**

  1. #1.用户自定义异常类型
  2. class TooLongExceptin(Exception):
  3. "this is user's Exception for check the length of name "
  4. def __init__(self,leng):
  5. self.leng = leng
  6. def __str__(self):
  7. print("姓名长度是"+str(self.leng)+",超过长度了")
  8. #2.手动抛出用户自定义类型异常
  9. def name_Test():
  10. name = input("enter your naem:")
  11. if len(name)>4:
  12. raise TooLongExceptin(len(name)) #抛出异常很简单,使用raise即可,但是没有处理,即捕捉
  13. else :
  14. print(name)
  15. #调用函数,执行
  16. name_Test()
  17. -----------------执行时满足条件后抛出一个用户定义的异常如下:--------------------------------------
  18. enter your naem:是打发斯蒂芬
  19. Traceback (most recent call last):
  20. 姓名长度是6,超过长度了
  21. File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 21, in <module>
  22. name_Test()
  23. __main__.TooLongExceptin: <exception str() failed>

3.捕捉用户手动抛出的异常

  1. #1.捕捉用户手动抛出的异常,跟捕捉系统异常方式一样
  2. def name_Test():
  3. try:
  4. name = input("enter your naem:")
  5. if len(name)>4:
  6. raise TooLongExceptin(len(name))
  7. else :
  8. print(name)
  9. except TooLongExceptin as e_result: #这里异常类型是用户自定义的
  10. print("捕捉到异常了")
  11. print("打印异常信息:",e_result)
  12. #调用函数,执行
  13. name_Test()
  14. ==========执行结果如下:==================================================
  15. enter your naem:aaafsdf
  16. 捕捉到异常了
  17. Traceback (most recent call last):
  18. 打印异常信息: 姓名长度是7,超过长度了
  19. 姓名长度是7,超过长度了
  20. File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 16, in name_Test
  21. raise TooLongExceptin(len(name))
  22. __main__.TooLongExceptin: <exception str() failed>
  23. During handling of the above exception, another exception occurred:
  24. Traceback (most recent call last):
  25. File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 26, in <module>
  26. name_Test()
  27. File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 22, in name_Test
  28. print("打印异常信息:",e_result)
  29. TypeError: __str__ returned non-string (type NoneType)

统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。

发表评论

表情:
评论列表 (有 0 条评论,400人围观)

还没有评论,来说两句吧...

相关阅读