曝工资,俞荷芳微博,今日扬州天气
python 是面向对象的语言,所以程序抛出的异常也是类。
常见的异常类
1.nameerror:尝试访问一个没有申明的变量
2.zerodivisionerror:除数为 0
3.syntaxerror:语法错误
4.indexerror:索引超出序列范围
5.keyerror:请求一个不存在的字典关键字
6.ioerror:输入输出错误(比如你要读的文件不存在)
7.attributeerror:尝试访问未知的对象属性
8.typeerror:传给函数的参数类型不正确,比如给 int 函数传入字符型
自定义异常类
尽管内建的异常类已经包括大部分情况,但如果需要创建自己的异常类,可以采用下面的方法:
捕获异常
抛出异常
如果我们想要在自己编写的程序中主动抛出异常,可以采用如下两种方法:
raise exception(reason)
exception 必须是一个异常类的名称。可选项 reason 用来传递异常的信息。
assert expression[,reason]
assert 是断言的关键字。当表达式 expression 为真则什么都不做,否则抛出 assertionerror 异常。reason 提供异常的信息。
上下文管理器
由于对象 file 支持上下文管理协议,因此可以采用下面的方法打开文件:
example
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 的其他异常
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
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论