python_异常和处理、文件的各种操作

1.异常

程序在运行过程中不可避免出现的错误。
比如直接print(abc),哈哈哈
比如引用了没有赋值的变量和超出索引…

这些错误我们称之为“异常”

程序一旦出现异常,会导致程序立即终止!!! 异常后面的代码都不会执行

@@@ 处理异常
出现异常程序停止,是希望我们编写相应的代码对异常进行处理。

以下组合处理手段可以用(try except else),我的老师告诉我说,这叫“试婚哦”!啊哈哈哈。
这里的else 是不出错也会执行的,跟if …else 的else不同哦。
在这里插入图片描述
运行结果,hallo , 2.0 , java
在这里插入图片描述
以下是出错情况的运行结果,因为6/0会出错

在这里插入图片描述
有错误时,else 语句块不会执行
在这里插入图片描述

2.异常的传播

print6/0#相当于在全局先来了个报错
def fn():
    print('hello fn')

fn()
   #如果在函数中,对异常进行了处理,则异常不会再继续传播;下面是没有处理,所以会传播给函数调用处,即继续向函数调用处传播,谁调用它,就传谁(    fn()好惨,哈哈哈!    )
def fn():
    print('hello fn')
    print6/0#设置的异常
fn()
   #如果在函数中,对异常进行了处理,则异常不会再继续传播;下面是没有处理,
def fn():
    print('hello fn')
    print6/0#设置的异常
try:
    fn()
except:
    pass    

下面看一个复杂一些的,因为没有及时处理,产生了连锁报错:
23异常(zerodivisionerror)、–>fn2、–>fn3、–>fn 全局
在这里插入图片描述
【以上总结】当程序在运行过程中,出现了异常以后,所有异常信息会被保存到一个专门异常对象中,而异常进行传播时,其实就是异常抛给了调用处。

3.异常对象

Print('异常出现前')

try:
	print(abc)  #是异常1   NameError
	print(6/0)  #是异常2   ZeroDivisonError
	
except NameError:
    #如果except后面不跟任何内容,则此时他会捕获所有的内容
    #如果except后面跟着一个异常类型,它只会捕获该类型的异常,如此例子跟的是NameError类型,则会忽略非NameError类型的异常哦。
	print('处理异常的逻辑...')
	
print('异常出现后')

但是一个个专门对应去捕获也很麻烦对吧!

try:
	print(abc)  #是异常1   NameError
	print(6/0)  #是异常2   ZeroDivisonError
	
except Exception as e:
   
	print('出现异常了','e')

运行结果如下
在这里插入图片描述

结合finally的用法:

Print('异常出现前')
try:
	print(abc)  #是异常1   NameError
	print(6/0)  #是异常2   ZeroDivisonError
	
except Exception as e:
	print('出现异常了','e')
finallyprint('无论有没有异常,哥们都执行')
print('异常出现后')

运行结果如下
在这里插入图片描述
在这里插入图片描述

4.文件

通过python程序对计算机中的各种文件进行增删改查的操作 I/O(Input/Output)
正常的人为操作文件流程:

  1. 打开
  2. 操作文件(读写)、保存
  3. 关闭

那么程序怎么做呢?
1.open() 这个内置函数,file是参数(文件或路径), 后面的全是关键字。
在这里插入图片描述

#Open()     file 是要打开文件的名字或路径

file_name='demo.txt'
open(file_name)    #注意open()函数是由返回值的,就是当前打开的文件

在这里插入图片描述
同理:路径方式,但是注意小细节如下图:
在这里插入图片描述

读取内容 用到 read() 方法,读取文件内容,以字符串来返回。
在这里插入图片描述
2.close() 方法,关闭文件
在这里插入图片描述
如果关闭后没有报错,说明没有关文件哦,因为正常要打开才能读
在这里插入图片描述
当代码多,可能遗忘 close 或者open等。所以用一行语句来做:

with…as语句,合并几行来写的
#一旦with…as语句结束,文件自动关闭

with open(file_name) as file_obj      #file_obj 是文件打开函数的返回值
	print(file_obj.read())

举例 abc.txt是不存在的,那么看怎么报错。
在这里插入图片描述
所以标准版本文件代码: 用到了格式化字符串
在这里插入图片描述
3.读取文件

文件类型:
1.纯文本 utf-8 GBK等 (英文纯文本ascII ,python是可以直接解析的,而中文纯文本不能解析,所以必须用encoding关键字指定)
在这里插入图片描述
在这里插入图片描述

  1. 二进制文件 如 音频、视频、音乐MP3、图片

open()函数默认打开的是纯文本
在这里插入图片描述

用**

read()

read()可以接受一个size作为参数,该参数用来指定读取字符的数量,默认值为-1(即-1是全部内容)
**读取内容时,会直接将全部内容读取出来,如果是读取一个较大文件,会一次性加载到内存中,很容易导致内存溢出。

较大文件怎么解决呢? 不要直接调用read()。
用help来解决,注意help()中read不能跟括号,否则是调用方法呢,而不是对象啊,要报错的。
在这里插入图片描述

看看这个size -1的样子
在这里插入图片描述
重复的语句,是会读取后续的指定数量的字符。每一次都是从上次读取位置接着读取。
size 设置6, 因为古诗前三行带回车,第四行不换行了,所以没有回车计算。
在这里插入图片描述
运行结果是:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
下图又死循环了,没有设置字数
在这里插入图片描述
判断以下,没有内容了,break一下即可:
在这里插入图片描述
end=’’ # 换行
在这里插入图片描述
4.其他的读取方式
正常方式
在这里插入图片描述
读取一行的 readline 方法:
在这里插入图片描述
在这里插入图片描述
带s的方法几乎都会将所有内容放到列表中返回。
在这里插入图片描述
运行结果是 [ #,$,%,^,&,* ]

5.文件的写入 write()
不指定操作类型,则默认为读取文件,不能直接写入内容,下图报错
在这里插入图片描述
指定w ,表示指定写入操作。
在这里插入图片描述
其他一些写的参数
其中a表示追加内容在这里插入图片描述

在这里插入图片描述
write 必须是字符串,不符合的可以处理下,转换类型
在这里插入图片描述
处理结果
在这里插入图片描述
write()有返回值的,实验证明,返回的是写入字符的个数(含换行符 \n )

其他一些写的参数在这里插入图片描述

本节回顾

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值