目录
-
raise 抛出异常:
源代码:
mts@DESKTOP-MTS:~/document/python$ cat try.py import os try: raise OSError('os.mkdir(new)') # 人为抛出异常 except OSError as e: print("Oops! That was no valid number:Try again") os.mkdir('new') print("\n*******{}".format(e)) print("######") raise
运行结果:
mts@DESKTOP-MTS:~/document/python$ python try.py Oops! That was no valid number:Try again *******os.mkdir(new) # 输出的 e 就是 raise后 OSError中的字符串 ###### Traceback (most recent call last): File "try.py", line 3, in <module> raise OSError('os.mkdir(new)') OSError: os.mkdir(new) # 继续抛出异常 之后的代码不做处理
-
用户自定义异常
下列代码类B 表示自定义异常 继承类Exception的属性:
mts@DESKTOP-MTS:~/document/python$ cat try2.py
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except D:
print("D")
except C:
print("C")
except B:
print("B")
mts@DESKTOP-MTS:~/document/python$ python try2.py
B
C
D
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except B:
print("B")
except C:
print("C")
except D:
print("D")
mts@DESKTOP-MTS:~/document/python$ python try2.py
B
B
B
class Error(Exception):
pass
class InputError(Error):
def __init__(self, expression, message):
self.expression = expression
self.message = message
try:
raise InputError('###1error###','abc')
except InputError as e:
print(e.expression)
print("$$$$$$$$$$$$")
except Error:
print("B")
mts@DESKTOP-MTS:~/document/python$ python try.py
###1error###
$$$$$$$$$$$$
mts@DESKTOP-MTS:~/document/python$
class Error(Exception):
pass
class InputError(Error):
def __init__(self, expression, message):
self.expression = expression
self.message = message
try:
raise InputError('###1error###','abc')
except Error:
print("B")
except InputError as e:
print(e.expression)
print("$$$$$$$$$$$$")
mts@DESKTOP-MTS:~/document/python$ python try.py
B
自定义异常的参数 instance.args
>>> class Error(Exception):
... pass
...
>>> try:
... raise Error('abc','def','gh')
... except Error as e:
... print(e.args)
...
('abc', 'def', 'gh')
>>>
try语句总结
try:
A
except ErrorName:
B
else:
C
finally:
D
执行A的话必然执行C和D
执行B的话必然执行D
不管怎样用必然执行D
-
断言异常
assert 1==2,12
等价于
if not 1==2:
raise AssertionError('12')
--------例如一下代码---------------------
>>> assert 1==2, 12
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: 12
>>> if not 1==2:
... raise AssertionError(12)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AssertionError: 12