自己弄了一个python学习群,感兴趣的可以加
我们在书写代码,运行程序的时候肯定不是一帆风顺的。总会有这样那样的问题
比如:
with open('12194548.tx') as file_object:
with open('12194548copy.txt', 'w') as write_file_object:
for line in file_object:
write_file_object.write(line)
输出:
Traceback (most recent call last):
File "E:/pythonLearn/FileWriter.py", line 1, in <module>
with open('12194548.tx') as file_object:
FileNotFoundError: [Errno 2] No such file or directory: '12194548.tx'
这是一个很常见的异常,根据异常的信息我们可以轻易的定位到问题所在。
File "E:/pythonLearn/FileWriter.py", line 1, in <module>
看到这句话我们就知道应该去第一行去找,但是找什么?
FileNotFoundError: [Errno 2] No such file or directory: '12194548.tx'
看到这句话我们就明白了,这是程序找不到12194548.tx文件,那样我们就只需要去核实当前路径下是否存在12194548.tx这个文件,问题就会轻而易举的解决了
但是异常打印出来的这些个信息,我们作为程序员是可以知道什么意思,但是作为用户来讲,他们会明白这是什么意思吗?
所以如果这样的提示信息给用户,那么用户的体验一定会非常的不好
那怎么办?
try:
with open('12194548.tx') as file_object:
with open('12194548copy.txt', 'w') as write_file_object:
for line in file_object:
write_file_object.write(line)
except FileNotFoundError as file_not_found:
print(file_not_found.filename, "该文件在当前路径下找不到")
输出:
12194548.tx 该文件在当前路径下找不到
这样的异常信息是不是简单明了呢?
说了这么多,我们先来看一下异常语句的语法:
try:
代码块
except ExceptionType as name
或者:
try:
代码块
except ExceptionType
这两个有什么区别呢?
如果你想知道异常的详细信息,可以通过 as 来将异常重新命名然后输出异常里面你所需要的信息
except可以进行多次的捕捉
try:
with open('12194548.tx') as file_object:
with open('12194548copy.txt', 'w') as write_file_object:
for line in file_object:
write_file_object.write(line)
except ZeroDivisionError as error:
print("该文件在当前路径下找不到")
except FileNotFoundError as file_not_found:
print(file_not_found.filename, "该文件在当前路径下找不到")
注意:位于前面的except的错误类型,不能是后面类型的父类
上面那句话不是说会报错,是因为如果父类异常在子类前面,那么子类永远不会捕捉到这个异常,属于垃圾代码
然而异常有很多类型。对于老司机来说,可以知道这段代码可能会出现什么异常,然后采用对应的异常类型来进行捕捉,但是即便是老司机也会有翻车的时候
所以当老司机翻车了即异常捕捉失败了我们该怎么办呢?
使用 异常的基类 exception
try:
代码块
except Exception as name
代码块
例如:
try:
with open('12194548.tx') as file_object:
with open('12194548copy.txt', 'w') as write_file_object:
for line in file_object:
write_file_object.write(line)
except Exception as e:
print("该文件在当前路径下找不到")
这也是我们工作中常用的一种方式。
另外异常还有很多种组合
try:
代码块
except ExceptionType as name
代码块
else:
代码块
这是在我们捕捉异常失败之后进行的操作,当然了不需要else,没有异常代码也会继续往下进行,所以这个可以根据实际业务场景进行添加
例如:
try:
with open('12194548.txt') as file_object:
with open('12194548copy.txt', 'w') as write_file_object:
for line in file_object:
write_file_object.write(line)
except FileNotFoundError as e:
print("该文件在当前路径下找不到")
else:
print("搞点事情.........")
输出:
搞点事情.........
官方组合:
try:
代码块
except ExceptionType as name
代码块
finally:
代码块
finally面的代码块是始终都会运行的,不管这部分有没有异常,都会执行
例如:
try:
with open('12194548.tx') as file_object:
with open('12194548copy.txt', 'w') as write_file_object:
for line in file_object:
write_file_object.write(line)
except FileNotFoundError as e:
print("该文件在当前路径下找不到")
finally:
print("每次都会运行我,你说气人不? 搞点事情.........")
输出:
该文件在当前路径下找不到
每次都会运行我,你说气人不? 搞点事情.........
查看原文,查看其他异常
一分钟,勤动手:
number_str1 = input("输入一个数字")
number_str2 = input("再输入一个数字")
try:
number = int(number_str1) + int(number_str2)
except ValueError as type_error:
print("丫看不懂让你输入数字吗? 结束了")
else:
print(number)
输出:
输入一个数字t
再输入一个数字7
丫看不懂让你输入数字吗? 结束了
你还能在进行优化吗?
将你的优化直接在公众号下回复吧
关注公众号:Python互助小组
一起学习,共同进步
里面有不定期的赠书活动哦