Grundlagen-15, Ausnahmen und Dateien

  • 一、异常
    • 1、异常的简介
    • 2、异常的传播
    • 3、异常对象
  • 二、文件
    • 1、文件的打开
    • 2、文件的关闭
    • 3、文件的读取
      • 1、读取文件
      • 2、较大文件的读取
    • 4、文件的写入
    • 5、二进制文件的写入

一、异常

1、异常的简介

  • 程序在运行过程中可能会出现一些错误。比如:使用了不存在的索引,两个不同类型的数据相加。。。。这些错误我们称之为异常。
  • 处理异常:程序在运行时出现异常,目的并不是让我们的程序直接终止!Python是希望在出现异常时,我们可以编写代码来对异常进行处理。
  • 代码演示:
print('hello world')
try:# print(a)print(2)
except:print('哎哟,这个代码写错了呀!!!')
else:print('没有问题真好')print('hello python')# try....except语句,捕获异常的语句# try:  代码块,可能出错的语句   没有出错正常执行
# except: 代码块, 出错以后我的处理方案
# else: 代码块  没有出错我要执行的语句

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/异常的简介.py
hello world
2
没有问题真好
hello pythonProcess finished with exit code 0

2、异常的传播

  • 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会在进行传播。如果函数中没有对异常进行处理,则异常会继续向函数调用传播。如果函数调用处处理了异常,则不再传播异常,如果没有处理则继续向调用处传播。直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并显示异常信息。
  • 当程序运行过程中出现异常以后,所有异常信息会保存到一个异常对象中。而异常传播时,实际上就是异常对象抛给了调用处。
  • 代码演示:
def fun():print('我是fun函数')# try:#     # print(1 / 0)  # try尝试执行可能出错的代码,如果没错,直接执行,有错不在执行#     print(1)  # try尝试执行可能出错的代码,如果没错,直接执行,有错不在执行# except:#     print('哎呀,出错了呀')  # try语句出错了,except语句就执行# else:#     print(111111)   # 没有出错就会执行的代码print(1 / 0)def fun1():print('我是fun1函数')fun()def fun2():print('我是fun2函数')fun1()def fun3():print('我是fun1函数')# try:#     fun2()# except:#     print('广大群众请放心,不会出错的')# try:
#     fun3()
# except:
#     print('广大群众请放心,不会出错的')fun2()

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/异常的传播.py
我是fun2函数
我是fun1函数
我是fun函数
Traceback (most recent call last):File "D:\PycharmProjects\基础班第11期\day-15\上课代码\异常的传播.py", line 36, in <module>fun2()File "D:\PycharmProjects\基础班第11期\day-15\上课代码\异常的传播.py", line 21, in fun2fun1()File "D:\PycharmProjects\基础班第11期\day-15\上课代码\异常的传播.py", line 16, in fun1fun()File "D:\PycharmProjects\基础班第11期\day-15\上课代码\异常的传播.py", line 11, in funprint(1 / 0)
ZeroDivisionError: division by zeroProcess finished with exit code 1

3、异常对象

  • 语法:
try语句try:代码块(可能出现错误的语句)except 异常类型 as 异常名:代码块(出现错误以后的处理方式)except 异常类型 as 异常名:代码块(出现错误以后的处理方式)except 异常类型 as 异常名:代码块(出现错误以后的处理方式)....else:代码块(没出错时要执行的语句)finally:代码块(是否出错该代码块都会执行)try是必须的 else有没有都可以except和finally至少有一个

代码练习:

print('hello world')
try:print(a)print(1/0)
# 当我们有多个except处理异常的时候,只会处理一个异常
except NameError:  # 捕获NameError的错误print('哎哟,这个代码写错了呀!!!')
except ZeroDivisionError:print('你这个0真是傲娇')else:print('没有问题真好')print('hello python')print('hello world')
try:# print(a)print(1/0)
except Exception as e:print('我的功能是最强大的', e, type(e))
else:print('没有问题真好')print('hello python')

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/异常对象.py
hello world
哎哟,这个代码写错了呀!!!
hello python
hello world
我的功能是最强大的 division by zero <class 'ZeroDivisionError'>
hello pythonProcess finished with exit code 0
  • 总结:

    • AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
    • NameError:试图访问的变量名不存在
    • SyntaxError:语法错误,代码形式错误
    • Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions模块中定义。
    • IOError:一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误
    • KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
    • IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引
    • TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误
    • ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误
    • ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

二、文件

1、文件的打开

  • 文件(file)通过Python程序来对计算机的各种文件进行增删改查的操作。
  • 文件也叫I/O(Input/Output)
  • 文件的操作步骤:
    • 打开文件
    • 对文件进行各种操作(读、写)然后保存。
    • 关闭文件
  • 文件会有一个返回值。返回一个对象,这个对象就表示的是当前打开文件。
    open是打开文件
    代码演示(绝对路径):
file_name = 'D:\PycharmProjects\基础班第11期\demo-1'
file_obj = open(file_name)
print(file_obj)

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码练习/打开文件.py
<_io.TextIOWrapper name='D:\\PycharmProjects\\基础班第11期\\demo-1' mode='r' encoding='cp65001'>Process finished with exit code 0

代码演示(相对路径):

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码练习/打开文件.py
<_io.TextIOWrapper name='..\\..\\demo-1' mode='r' encoding='cp65001'>Process finished with exit code 0

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码练习/打开文件.py
<_io.TextIOWrapper name='..\\..\\demo-1' mode='r' encoding='cp65001'>Process finished with exit code 0

2、文件的关闭

  • 调用close()方法来关闭文件
  • with…as 语句不用写close()来关闭。它自带关闭
    代码演示(close()方法):
file_name = 'demo.txt'
file_obj = open(file_name)
content = file_obj.read()
print(content)
#
# file_obj.close()
#
# file_obj.read()

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/关闭文件.py
两袖清风怎敢误佳人Process finished with exit code 0

代码演示(close()方法):

file_name = 'demo.txt'
file_obj = open(file_name)
content = file_obj.read()
print(content)
#
file_obj.close()
file_obj.read()

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/关闭文件.py
两袖清风怎敢误佳人
Traceback (most recent call last):File "D:\PycharmProjects\基础班第11期\day-15\上课代码\关闭文件.py", line 7, in <module>file_obj.read()
ValueError: I/O operation on closed file.Process finished with exit code 1

上述错误的意思:

追溯(最近一次通话):文件“ D:\ PycharmProjects \基础班第11期\ day-15 \上课代码\关闭文件.py”,第7行,在<module>中file_obj.read()
ValueError:对关闭的文件进行I / O操作。

表示文件未打开无法读取。
代码演示(with open as f):

file_name = 'demo.txt'
try:with open(file_name) as f:content = f.read()print(content)
except FileNotFoundError:print(f'{file_name}文件不存在')f.read()

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/关闭文件.py
Traceback (most recent call last):File "D:\PycharmProjects\基础班第11期\day-15\上课代码\关闭文件.py", line 20, in <module>f.read()
ValueError: I/O operation on closed file.
一生清贫怎敢恋繁华,
两袖清风怎敢误佳人。
三餐不济怎敢叙高堂,
四季漂离怎敢言家成。
五行缺钱愁从心中生,
六道不济万事难如意。
七窍玲珑阅尽天下人,
八百孤寒难守炽情归.
九朝同歌弃往世悔憾,
十载梦离奔心之所往。Process finished with exit code 1

错误提示与上述相同。

3、文件的读取

1、读取文件

  • 通过read()来读取文件的内容
  • 调用open()来打开一个文件,可以将文件分为2中类型
    • 一种 纯文本文件(使用utf-8编码编写的文件)
    • 一种 二进制文件(图片 mp3 视频…)
    • open()打开文件时,默认是以文本文件的形式打开的 open()默认的编码为None。所以处理文本文件时要指定编码

2、较大文件的读取

  • 通过read()读取文件内容时会将文件中所有的内容全部读取出来。如果对于读取的文件比较大的话。会一次性的将文件加载到内容中。容易导致内存泄露。所以对于较大的文件。不要直接调用read()
  • read()可以接收一个size作为的参数。该参数用来指定要读取字符的数量。默认值为-1.-1也就是要读取全部的内容
  • 每次读取都会从上次读取到的位置开始。如果字符的数量小于size。则会读取所有的。如果读取到最后的文件。则会返回空串
  • readline() 该方法用来读取一行
  • readlines() 该方法用于一行一行的读取内容,它会一次性将读取到的内容封装到一个列表当中返回
    代码演示(read()方法):
    demo:
一身清贫怎敢入繁华,
两袖清风怎敢误佳人!
三生有幸怎敢遇见你,
四目相对怎敢目无你,
五行皆空怎敢奢求你,
六道轮回怎敢忘记你。

演示1:

file_name = 'demo.txt'
try:with open(file_name, encoding='utf-8') as f:# content = f.read(8)content = f.read()print(content)
except FileNotFoundError:print(f'{file_name}文件不存在')

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/文件的读取.py
一身清贫怎敢入繁华,
两袖清风怎敢误佳人!
三生有幸怎敢遇见你,
四目相对怎敢目无你,
五行皆空怎敢奢求你,
六道轮回怎敢忘记你。Process finished with exit code 0

演示2:

file_name = 'demo.txt'
try:with open(file_name, encoding='utf-8') as f:# content = f.read(8)content = f.read(8)print(content)
except FileNotFoundError:print(f'{file_name}文件不存在')

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/文件的读取.py
一身清贫怎敢入繁Process finished with exit code 0

代码演示(readline()):
demo:

一身清贫怎敢入繁华,
两袖清风怎敢误佳人!
三生有幸怎敢遇见你,
四目相对怎敢目无你,
五行皆空怎敢奢求你,
六道轮回怎敢忘记你。
file_name = 'demo.txt'
try:with open(file_name, encoding='utf-8') as f:for i in range(6):content = f.readline()print(content)
except FileNotFoundError:print(f'{file_name}文件不存在')

打印输出结果:

E:\python\python.exe D:/PycharmProjects/基础班第11期/day-15/上课代码/文件的读取.py
一身清贫怎敢入繁华,两袖清风怎敢误佳人!三生有幸怎敢遇见你,四目相对怎敢目无你,五行皆空怎敢奢求你,六道轮回怎敢忘记你。Process finished with exit code 0

4、文件的写入

  • write()来向文件中写入内容

    • 该方法可以分多次向文件写入内容
    • 写入完成之后该方法会返回写入的字符的个数
  • 使用open()函数打开文件时,必须要指定打开文件要做的操作(读、写、追加)。如果不指定操作类型,则默认是读取文件,而读取文件是不能向文件中写入
    • r–表示只读
    • w–表示可以写。使用w写入文件时,如果文件不存在则会创建一个文件。如果文件存在则会覆盖原文件内容
    • a–追加写入
      代码演示(w演示):
      demo:
一身清贫怎敢入繁华,
两袖清风怎敢误佳人!
三生有幸怎敢遇见你,
四目相对怎敢目无你,
五行皆空怎敢奢求你,
六道轮回怎敢忘记你。
file_name = 'demo.txt'
# 'w'覆盖式写入
with open(file_name, 'w', encoding='utf-8') as f:f.write('一生清贫怎敢恋繁华,\n两袖清风怎敢误佳人。\n三餐不济怎敢叙高堂,\n四季漂离怎敢言家成。\n五行缺钱愁从心中生,\n六道不济万事难如意。')

打印输出结果:
demo:

一生清贫怎敢恋繁华,
两袖清风怎敢误佳人。
三餐不济怎敢叙高堂,
四季漂离怎敢言家成。
五行缺钱愁从心中生,
六道不济万事难如意。

代码演示(a演示):
demo:

一生清贫怎敢恋繁华,
两袖清风怎敢误佳人。
三餐不济怎敢叙高堂,
四季漂离怎敢言家成。
五行缺钱愁从心中生,
六道不济万事难如意。
file_name = 'demo.txt'# 'a'追加式写入
with open(file_name, 'a', encoding='utf-8') as f:f.write('\n七窍玲珑阅尽天下人,\n八百孤寒难守炽情归.\n九朝同歌弃往世悔憾,\n十载梦离奔心之所往。')

打印输出结果:
demo:

一生清贫怎敢恋繁华,
两袖清风怎敢误佳人。
三餐不济怎敢叙高堂,
四季漂离怎敢言家成。
五行缺钱愁从心中生,
六道不济万事难如意。
七窍玲珑阅尽天下人,
八百孤寒难守炽情归.
九朝同歌弃往世悔憾,
十载梦离奔心之所往。

5、二进制文件的写入

  • 读取文本文件时,size是以字符为单位。读取二进制文件时,size是以字节为单位
  • 我们用wb来写入二进制文件
file_name = r'Users/wangjiaxin/Desktop\LindseyStirling_Artemis.ncm'with open(file_name, 'rb') as f:# print(f.readline())new_file = '123.mp3'with open(new_file, 'wb') as f1:while True:content = f.read(1024 * 1000)if not content:breakf1.write(content)

基础--15、异常与文件相关推荐

  1. python14基础末异常文件

    1.异常的简介 ----程序在运行过程中可能会出现一些错误.比如: 使用了不存在的索引,两个不 同类型的数据相加-这些错误我们称之为异常 ----处理异常 程序运行时出现异常,目的并不是让我们的程序直 ...

  2. 东师计算机应用基础18秋在线作业3答案,奥鹏东师计算机应用基础15秋在线作业3试卷及答案(4)...

    计算机应用基础15秋在线作业3 一.单选题(共25道试题,共62.5分.) 1.文件夹又称"目录",它的作用是 A. 把"文件"夹起来 B. 把文件夹分成子文件 ...

  3. 十九. Python基础(19)--异常

    十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <...............&g ...

  4. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

  5. Python基础(十)--文件相关

    目录 Python基础(十)--文件相关 1 读写文件 1.1 获取文件对象 1.2 文件读取 1.3 文件写入 1.4 文件定位 2 文件与路径的操作 2.1 os模块 2.2 os.path模块 ...

  6. 奥鹏东师计算机应用基础18,免费在线作业答案奥鹏东师计算机应用基础15秋在线作业1试卷及答案(1)...

    奥鹏东师计算机应用基础15秋在线作业1试卷及答案(1) 一.单选题(共25道试题,共62.5分.) 1.在Excel 中保存的工作簿默认的文件扩展名是(). A. XLS B. DOC C. DBF ...

  7. java catch空指针异常处理_Java基础学习:java文件空指针异常处理

    在Java编程中,我们或多或少地会遇到一些程序异常的情况,为了不影响程序的正常执行,我们需要在程序发生异常的情况下,进行一些操作来防止造成更大的损失.例如在我们平时的除法运算中,被除数是不能为0的,如 ...

  8. 【CXY】JAVA基础 之 异常

    讲述: 1.五个关键字 1.try:尝试捕获异常,具体的下面讲述 2.catch:当try捕获到异常了,系统会自动生成一个异常信息,这个异常信息就给catch,形象的说我抓住了这个异常. 3.thro ...

  9. java 抛出异常的作用_Java 基础之异常抛出

    Java 基础之异常抛出 Java,基础,异常抛出 在 Java 里,除了对异常的捕获外,你还可以抛出异常,还可以创造异常.抛出异常的作用就是告诉你的调用者,程序出现了不正常的情况了,得不要期望的结果 ...

  10. Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)

    原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...

最新文章

  1. 营销系统--手动补偿
  2. linux 下 php 扩展
  3. python删除数据库的数据完整代码_利用python操作小程序云数据库实现简单的增删改查...
  4. .NETer,如何用.NET Core 3.0武装自己?这样学效率提高10倍!
  5. 微软XAML Studio - WPF, UWP, Xamarin等技术开发者的福音
  6. mysql插入时间区间_mybatis插入数据时返回主键以及MySQL根据时间区间查询问题总结...
  7. java亮剑_黄金矿工3-太空版
  8. 手把手教你如何优化C语言程序
  9. Linux 安装 MySQL 数据库
  10. 数据预处理与特征工程—6.Kaggle房价预测中数据预处理与特征工程
  11. keymaker注册机之内在注册机教程
  12. 如何用c#语言构造蜘蛛程序(网络爬虫实现),如何构造一个C#语言的爬虫蜘蛛程序1.doc...
  13. DSP28335加密及解密
  14. Programer or Coder?
  15. 计算机病毒片头制作,怎么用格式工厂做gif_格式工厂怎么制作片头_格式工厂能做什么...
  16. guava深入理解(3)-字符串,实用方法,函数式编程
  17. python机器学习——加州房价
  18. matlab矩阵求逆的模块,matlab矩阵求逆矩阵
  19. 汇编语言基础入门知识
  20. 2021高考成绩特长生查询,2021高考体育生分数怎么算 体育四项评分标准及分值一览表...

热门文章

  1. 主流区块链共识算法大全
  2. VE视频引擎支持的两种特效模板类型
  3. 如何设置工业设备的振动监测阈值
  4. MongoDB在58同城百亿量级数据下的应用实践
  5. 品味家的自然享乐主义
  6. findbugs安装和使用
  7. 银色情人节,TcaplusDB数据库与你一起过节!
  8. 【八】Python全栈之路--文件操作
  9. Permission Denial: INTERACT_ACROSS_USERS_FULL or INTERACT_ACROSS_USERS
  10. chrome opera ie等浏览器hack解决方案