Python异常处理总结

作者:shichen2014 时间:2021-12-18 17:19:19 

本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下:

1. 抛出异常和自定义异常

Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

①.raise 语句

Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示:


# -- coding: utf-8 --

def ThorwErr():
 raise Exception("抛出一个异常")

# Exception: 抛出一个异常
ThorwErr()

raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使用dir函数来查看exceptions中的异常类型,如下:


import exceptions

# ['ArithmeticError', 'AssertionError'.....]
print dir(exceptions)

传递异常

捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:


# -- coding: utf-8 --
class MuffledCalculator:
 muffled = False
 def calc(self,expr):
   try:
     return eval(expr)
   except ZeroDivisionError:
     if self.muffled:
       print 'Division by zero is illegal'
     else:
       raise

②.自定义异常类型

Python中也可以自定义自己的特殊类型的异常,只需要要从Exception类继承(直接或间接)即可:


class SomeCustomException(Exception):
 pass

2. 捕捉异常

和C#中的try/catch类似,Python中使用try/except关键字来捕捉异常,如下:


# -- coding: utf-8 --

try:
 print 2/0
except ZeroDivisionError:
 print '除数不能为0'

①.捕捉多个异常

在一个except语句只捕捉其后声明的异常类型,如果可能会抛出的是其他类型的异常就需要再增加一个except语句了,或者也可以指定一个更通用的异常类型比如:Exception,如下:


# -- coding: utf-8 --
try:
 print 2/'0'
except ZeroDivisionError:
 print '除数不能为0'
except Exception:
 print '其他类型异常'

为了捕获多个异常,除了声明多个except语句之外,还可以在一个except语句之后将多个异常作为元组列出来即可:


# -- coding: utf-8 --
try:
 print 2/'0'
except (ZeroDivisionError,Exception):
 print '发生了一个异常'

②.获取异常信息

每个异常都会有一些异常信息,一般情况下我们应该把这些异常信息记录下来:


# -- coding: utf-8 --
try:
 print 2/'0'
except (ZeroDivisionError,Exception) as e:
 # unsupported operand type(s) for /: 'int' and 'str'
 print e

3. finally子句

finally子句和try子句联合使用但是和except语句不同,finally不管try子句内部是否有异常发生,都会执行finally子句内的代码。所有一般情况下,finally自己常常用于关闭文件或者在Socket中。


# -- coding: utf-8 --
try:
 print 2/'0'
except (ZeroDivisionError,Exception):
 print '发生了一个异常'
finally:
 print '不管是否发生异常都执行'
标签:Python,异常,处理
0
投稿

猜你喜欢

  • ASP.NET获取不到JS设置cookies的解决方法

    2023-07-19 08:07:08
  • Python3.5以上版本lxml导入etree报错的解决方案

    2021-06-25 12:53:16
  • IE对CSS样式表的限制和解决方案

    2008-04-28 12:27:00
  • 网页设计进阶之六-- 守住那些不能丢的东西

    2008-06-12 13:06:00
  • golang微服务框架基础Gin基本路由使用详解

    2023-07-23 10:31:19
  • 自动定时备份sqlserver数据库的方法

    2011-11-03 17:28:17
  • 使用ASP订制自己的XML文件读写方法

    2008-10-24 09:35:00
  • ASP幻灯片

    2009-09-04 18:05:00
  • Python实现遗传算法(二进制编码)求函数最优值方式

    2023-05-07 15:51:40
  • python爬虫将js转化成json实现示例

    2021-10-20 15:32:31
  • 由prototype_1.3.1进入javascript殿堂-类的初探

    2008-05-22 12:44:00
  • python中使用psutil查看内存占用的情况

    2022-11-11 11:26:22
  • asp如何实现按照输入汉字提示拼音功能?

    2010-05-18 18:37:00
  • 详细介绍pandas的DataFrame的append方法使用

    2022-08-25 07:00:34
  • ASP程序实现过滤脏话代码

    2008-03-19 12:07:00
  • ASP批量生成静态页面的写法(批量生成技巧iframe)

    2011-02-24 11:01:00
  • 使用Python来开发Markdown脚本扩展的实例分享

    2023-06-02 06:48:06
  • 对python使用telnet实现弱密码登录的方法详解

    2023-12-28 02:52:46
  • IE下Flash内容刷新后消失问题

    2008-01-02 12:38:00
  • Python中typing模块的具体使用

    2022-03-25 13:02:08
  • asp之家 网络编程 m.aspxhome.com