Day 11
作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这一节我们会详细说说这个错误和异常的处理。
1、python的标准异常总结
2、try-except 语句
- 其基本格式为:
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
- 让我们用一个例子来看看
try
的机制:
# example 1
try:
f = open('.\\study.txt')
print(f.read())
f.close()
except OSError:
print('打开文字出错') # 打开文字出错
try
语句按照如下方式工作:
- 首先,执行
try
子句(在关键字try
和关键字except
之间的语句) - 如果没有异常发生,忽略
except
子句,try
子句执行后结束。 - 如果在执行
try
子句的过程中发生了异常,那么try
子句余下的部分将被忽略。如果异常的类型和except
之后的名称相符,那么对应的except
子句将被执行。最后执行try
语句之后的代码。 - 如果一个异常没有与任何的
except
匹配,那么这个异常将会传递给上层的try
中。
# example 2
try:
f = open('.\\study.txt')
print(f.read())
f.close()
except OSError as error:
print('打开文字出错\n原因是:' + str(error))
'''
打开文字出错
原因是:[Errno 2] No such file or directory: '.\\study.txt'
'''
- 一个
try
语句可能包含多个except
子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。例如:
try:
int('找错误')
s = 666 + 22
f = open('test.txt')
print(f.read())
f.close()
except OSError as error:
print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
print('类型出错\n原因是:' + str(error))
except ValueError as error:
print('数值出错\n原因是:' + str(error))
except NameError as error:
print('名称出错\n原因是:' + str(error))
- 一个
except
子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
try:
int('找错误')
s = 666 + 22
f = open('test.txt')
print(f.read())
f.close()
except (OSError , TypeError , ValueError , NameError) as error:
print('出错\n原因是:' + str(error))
3、 try-except-finally 语句
- 语句的基本格式为:
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
- 不管
try
子句里面有没有发生异常,finally
子句都会执行。 - 如果一个异常在
try
子句里被抛出,而又没有任何的except
把它截住,那么这个异常会在finally
子句执行后被抛出。
def QAQ(x,y,z):
try:
answer = (x + y)/z
print('The answer is :', answer)
except (OSError, TypeError, ValueError, NameError, ZeroDivisionError) as error:
print('Found error!\n原因是:' + str(error))
finally:
print('Good job!')
QAQ(1,2,3)
# The answer is : 1.0
# Good job!
QAQ(1,2,'3')
# Found error!
# 原因是:unsupported operand type(s) for /: 'int' and 'str'
# Good job!
QAQ(1,2,0)
# Found error!
# 原因是:division by zero
# Good job!
4、raise语句
- Python 中使用
raise
语句抛出一个指定的异常。
try:
raise NameError('Hello world!')
except NameError:
print('mission success!') # mission success!
备注:
学习参考资料:
https://mp.weixin.qq.com/s?__biz=MzIyNDA1NjA1NQ==&mid=2651011483&idx=1&sn=bb0a0b65512999e54e61d6ead5185a64&chksm=f3e35e03c494d715da9fff5be8ee1e8ff1e91dd363817f712c0e4cf65826990e7cfd16ad9ccb&mpshare=1&scene=1&srcid=&sharer_sharetime=1572387356234&sharer_shareid=8c49d4226c319addceef298b781f6bb7&key=edde10a8bf3931373245d8d5e6f10b6ccd96b93d19b88af9ca607c7906f41bf9298d5adf295023080120c71642a9f4b41045682f7bccc858e68d43617c4514e63596e6d1df0a05aee0e086f1ca5a5598&ascene=1&uin=MTgxNzI3MTY0MQ%3D%3D&devicetype=Windows+10&version=62060841&lang=zh_CN&pass_ticket=haPIql8hq15zwkRdno8SQm%2FdJdZB9XAimfO8R%2BgCNHXVcoXcQrnWzGgU%2FiyaHTO9