时间:2021-05-22
Python 是面向对象的语言,所以程序抛出的异常也是类。
常见的异常类
1.NameError:尝试访问一个没有申明的变量
2.ZeroDivisionError:除数为 0
3.SyntaxError:语法错误
4.IndexError:索引超出序列范围
5.KeyError:请求一个不存在的字典关键字
6.IOError:输入输出错误(比如你要读的文件不存在)
7.AttributeError:尝试访问未知的对象属性
8.TypeError:传给函数的参数类型不正确,比如给 int 函数传入字符型
自定义异常类
尽管内建的异常类已经包括大部分情况,但如果需要创建自己的异常类,可以采用下面的方法:
复制代码 代码如下:
class CustomException(Exception): # Exception 为所有异常的基类
# 处理异常的代码
捕获异常
复制代码 代码如下:
try:
# 需要进行捕获异常的代码,只有出现异常之前的代码被最终执行
except (Exception1,Exception2,...) as argument:
# 捕获到 (Exception1,Exception2,...) 里的异常才执行本段代码
# argument 是一个异常类的实例,包含异常的具体信息
except:
# 捕获到 (Exception1,Exception2,...) 以外的异常执行本段代码,用 sys 模块的 exc_info() 函数可以获取异常信息
else:
# 如果没有捕获到异常则执行本段代码
finally:
# 无论是否捕获到异常都执行本段代码
上述语句并不都是必须的,譬如 try...except...、try...finally... 或者 try...except...else... 语句都是可行的。我们还可以 用 try...except...else... 代替 if...else...。
抛出异常
如果我们想要在自己编写的程序中主动抛出异常,可以采用如下两种方法:
raise Exception(reason)
Exception 必须是一个异常类的名称。可选项 reason 用来传递异常的信息。
assert expression[,reason]
assert 是断言的关键字。当表达式 expression 为真则什么都不做,否则抛出 AssertionError 异常。reason 提供异常的信息。
上下文管理器
由于对象 File 支持上下文管理协议,因此可以采用下面的方法打开文件:
复制代码 代码如下:
with open('filename') as fp:
# 无论本段代码是否出现异常,文件对象 fp 均能正确关闭
Example
复制代码 代码如下:
import sys
def div(num, den):
print('_________________ (',num,',',den,')\n')
try:
ans = num/den
assert den != num, 'Equal' # 断言:分子分母不相等
den = 'Changed' # 如果执行本语句之前未出现异常,改变 den 的值
if num % 2: # 如果分子为奇数,则抛出异常
raise ValueError('Odd')
except ZeroDivisionError as e:
print('except ... as ...\n\t', e)
except:
print('except\n\t', sys.exc_info())
else:
print('else\n\t', ans)
finally:
print('finally\n\t', den)
div(1,0)# 除数为零,为 ZeroDivisionError 异常类
div(1,1)# 分子等于分母,断言为假,抛出异常
div(2,1)# 无异常
div(3,1)# 分子为奇数,通过 raise 抛出异常
div(3,'x')# 不属于 ZeroDivisionError 的其他异常
运行结果:
复制代码 代码如下:
_________________ ( 1 , 0 )
except ... as ...
division by zero
finally
0
_________________ ( 1 , 1 )
except
(<class 'AssertionError'>, AssertionError('Equal',), <traceback object at 0x00000000029B42C8>)
finally
1
_________________ ( 2 , 1 )
else
2.0
finally
Changed
_________________ ( 3 , 1 )
except
(<class 'ValueError'>, ValueError('Odd',), <traceback object at 0x00000000029B42C8>)
finally
Changed
_________________ ( 3 , x )
except
(<class 'TypeError'>, TypeError("unsupported operand type(s) for /: 'int' and 'str'",), <traceback object at 0x00000000029B42C8>)
finally
x
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Python字符串处理学习中,有一道简单但很经典的题目,按照单词对字符串进行反转,并对原始空格进行保留:如:‘IloveChina!‘转化为:‘China!lo
本文实例讲述了python异常和文件处理机制。分享给大家供大家参考,具体如下:1异常处理Python的异常用tryexceptfinally来处理.并且exce
在Python中处理异常使用的是try-except代码块,try-except代码块放入让python执行的操作,同时告诉python程序如果发生了异常该怎么
Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异
什么是异常?异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。在程序运行过程中,总会遇到各种各样的错误,