1 异常机制
对于执行可能出现错误的代码,python提供异常机制以防止程序中断。
try:
some code...
except exception_class as e:
do_something1
finally:
do_something2
说明:
- 在
some code...里遇到异常就退出try块,进入异常类对应的except语句 finally后的语句是不管是否有异常都会执行的。- 异常类都继承自
BaseException,常见异常类型和继承关系见官方文档
try:
print('try...')
r = 10 / int('0')
print('result:', r)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
else:
print('no error!')
finally:
print('finally...')
print('END')
执行结果:
try...
ZeroDivisionError: division by zero
finally...
END
2 抛出异常
- 除了使用
except语句外,可以通过raise主动抛出异常实例。 - 如有必要,可以自己定义异常类(继承自python自带的异常类)。
# test.py
class FooError(ValueError):
pass
def foo(s):
n = int(s)
if n==0:
raise FooError('invalid value: %s' % s)
return 10 / n
foo('0')
执行后输出,可以跟踪到异常类:
Traceback (most recent call last):
File "test.py", line 10, in <module>
foo('0')
File "test.py", line 7, in foo
raise FooError('invalid value: %s' % s)
__main__.FooError: invalid value: 0
注意:
raise语句如果不带参数,就会把当前错误原样抛出。raise抛出异常便于追踪,且可以把一种异常类型转化为另一种类型:
# test.py
def foo(a, b):
if b == 0:
raise ValueError('invalid value: 0')
return a / b
try:
a, b = 10, 0
foo(a, b)
except ZeroDivisionError:
raise
执行输出:
Traceback (most recent call last):
File "test.py", line 8, in <module>
foo(a, b)
File "test.py", line 3, in foo
raise ValueError('invalid value: 0')
ValueError: invalid value: 0
本文详细介绍了Python中的异常处理机制,包括try-except-finally语句的使用,以及如何通过raise语句主动抛出异常。同时,还展示了如何自定义异常类,以便更精确地捕获和处理特定类型的错误。

被折叠的 条评论
为什么被折叠?



