初识Python之读写文件过程中的异常以及其它异常

自己弄了一个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互助小组
一起学习,共同进步
里面有不定期的赠书活动哦
公众号:Python互助小组 或者搜索python_group

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值