经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python异常对象Exception基础类异常捕捉
来源:jb51  时间:2022/6/6 15:45:33  对本文有异议

异常对象

Python中遇到错误后,会引发异常。

Python中使用异常对象来表示异常情况。

如果异常对象未被处理或者捕捉,程序就会用所谓的回溯(traceback)来终止执行。

下面是一个例子:

  1. def func1():
  2. raise Exception
  3. if __name__ == "__main__":
  4. func1()

执行之后报错:

  1. (venv) E:\Codes\python_everything\begining-python\src\08>list8-2.py
  2. Traceback (most recent call last):
  3. File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 19, in <module>
  4. func1()
  5. File "E:\Codes\python_everything\begining-python\src\08\list8-2.py", line 15, in func1
  6. raise Exception
  7. Exception

异常有不同的类型,Exception是基础类,下面还有各种子类:

  1. +-- Exception
  2. +-- StopIteration
  3. +-- StandardError
  4. | +-- BufferError
  5. | +-- ArithmeticError
  6. | | +-- FloatingPointError
  7. | | +-- OverflowError
  8. | | +-- ZeroDivisionError
  9. | +-- AssertionError
  10. | +-- AttributeError
  11. | +-- EnvironmentError
  12. | | +-- IOError
  13. | | +-- OSError
  14. | | +-- WindowsError (Windows)
  15. | | +-- VMSError (VMS)
  16. | +-- EOFError
  17. | +-- ImportError
  18. | +-- LookupError
  19. | | +-- IndexError
  20. | | +-- KeyError
  21. | +-- MemoryError
  22. | +-- NameError
  23. | | +-- UnboundLocalError
  24. | +-- ReferenceError
  25. | +-- RuntimeError
  26. | | +-- NotImplementedError
  27. | +-- SyntaxError
  28. | | +-- IndentationError
  29. | | +-- TabError
  30. | +-- SystemError
  31. | +-- TypeError
  32. | +-- ValueError
  33. | +-- UnicodeError
  34. | +-- UnicodeDecodeError
  35. | +-- UnicodeEncodeError
  36. | +-- UnicodeTranslateError

还可以通过继承Exception来实现自己的类:

  1. class SomeError(Exception): pass
  2. def func2():
  3. raise SomeError
  4. if __name__ == "__main__":
  5. func2()

异常捕捉

异常可以被捕捉,需要使用try...except...语句:

  1. class SomeError(Exception): pass
  2. def func2():
  3. raise SomeError
  4. if __name__ == "__main__":
  5. try:
  6. func2()
  7. except SomeError:
  8. print("Some error happened")

这里捕捉到了参数,所以就不会回溯:

  1. (venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
  2. Some error happened

但是如果是其它的异常:

  1. def func1():
  2. raise Exception
  3. class SomeError(Exception): pass
  4. def func2():
  5. raise SomeError
  6. if __name__ == "__main__":
  7. try:
  8. func1()
  9. except SomeError:
  10. print("Some error happened")

这里的Exception就没有被捕获,所以还是会回溯:

  1. (venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
  2. Traceback (most recent call last):
  3. File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 27, in <module>
  4. func1()
  5. File "E:\Codes\python_everything\begining-python\src\08\list8-3.py", line 15, in func1
  6. raise Exception
  7. Exception

如果没有出现异常,则会继续往下执行,但是这里可以有else语句来执行没有异常时可以执行的语句,使整个逻辑更通顺:

  1. if __name__ == "__main__":
  2. try:
  3. print("No exception")
  4. except SomeError:
  5. print("Some error happened")
  6. else:
  7. print("No error happened")

结果如下:

  1. (venv) E:\Codes\python_everything\begining-python\src\08>list8-3.py
  2. No exception
  3. No error happened

但是有时即使发生了无法捕捉的异常,也想要执行一些语句,这个时候就可以使用finally语句:

  1. def func1():
  2. raise Exception
  3. class SomeError(Exception): pass
  4. def func2():
  5. raise SomeError
  6. if __name__ == "__main__":
  7. try:
  8. func1()
  9. except SomeError:
  10. print("Some error happened")
  11. else:
  12. print("No error happened")
  13. finally:
  14. print("Do something")

Python中更倾向于使用try...except...这样的语句来代替if...else..语句。

以上就是Python异常对象异常捕捉及Exception基础类的详细内容,更多关于Python对象Exception类异常捕捉的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号