错误、异常和文件

1. 异常处理

错误指的是代码有语法问题,无法解释运行,必须改正后才能运行

如果代码没有语法问题,可以运行,但会出运行时的错误,例如除零错误,下标越界等问题,这种在运行期间检测到的错误被称为异常 ,出现了异常必须处理否则程序会终止执行,用户体验会很差。Phthon支持程序员自己处理检测到的异常。可以使用try-except语句进行异常的检测和处理

1.1 try-except语句

语法:try:【代码块A】 #可能会出错误的代码    异常检测except Exception1[ as e]:   #异常处理【代码块1】  #异常处理代码       except Exception2[ as e]:   #异常处理【代码块2】  #异常处理代码....except Exceptionn[ as e]:   #异常处理【代码块n】  #异常处理代码[else:]                #可选,如果没有引发异常会执行处理语句       [finally:]             #无论如何都要执行的语句处理语句【后续语句】
  • 执行流程:

    • 1、首先执行try中【代码块A】,如果出现异常,立即终止代码执行,转而到except块中进行异常处理

    • 2、异常处理except模块可以多个,从上往下匹配,如果能够匹配成功,立即执行相应的异常处理代码块,执行完毕后,不在往下匹配,转到3执行

    • 3、执行异常处理完毕后,如果有finally字句则执行finally字句,如果没有则执行【后续语句】

    • 4、如果匹配不到异常,有finally则执行finally,然后则抛出错误,终止程序执行。

    • 5、如果没有异常,如果有else字句则执行else字句,执行完else后,有finally字句则执行,没有则执行【后续语句】

  • 注意事项:

    • except匹配顺序从上到下

    • except语句书写要求:精确的类型往前放,模糊的,不精确的往后放

    • except不带任何类型,则匹配所有类型异常,应该放到最后,吞掉异常

    • 可以将多种异常用元组的方式(异常类型1,异常类型2...异常类型n)书写,简化代码

    • except字句中e,是一个对象,打印它,会显示异常信息描述

    • try-except也可以捕获方法或函数中抛出的异常

    • 所有异常类型都继承自BaseException,使用BaseException可以将异常一网打尽

    • finally字句中可以进行一些清理工作,比如关闭文件,数据库等工作

1.3 抛出异常

手动抛出一个指定类型的异常,无论是哪种异常类都可以带一个字符串参数,对异常进行描述。

  • raise不带参数会把错误原样抛出

try:raise ZeroDivisionError('除0错误')# raise ZeroDivisionError  #如果不想获取错误信息,可以不带参数
except ZeroDivisionError as e:print(e)  #除0错误

1.4 异常嵌套

在try块和excep块中还可以分别再嵌套try-except块

1.5 assert断言

语法:assert 条件 [,异常描述字符串]

执行流程:如果条件为假,则抛出AssertionError,条件为真,就当assert不存在

作用:对于可能出问题的代码,加上断言,方便问题排查

print('start')
num = int(input('请输入一个1~9的整数:'))
assert 0 <num <=9,'num不在1~9'
print('end')

1.6 自定义异常类

如果系统异常类型满足不了业务需求,那么可以自己定义异常类来处理。

  • 自己定义的异常类必须继承BaseException或Exception

  • 步骤:

    • 在自定义异常类的构造函数中,调用父类构造函数

    • 重写__str__方法输出异常信息

    • 编写异常处理方法处理异常

class CustomError(BaseException): #继承BaseExceptiondef __init__(self,msg):super().__init__()  #调用父类初始化self.msg = msg#重写__str__,输出异常信息def __str__(self):return self.msg#3.自定义异常处理方法def handle_exception(self):print('异常处理')try:raise CustomError('自定义异常')
except CustomError as e:print(e)

2. 文件处理

文件的处理包括读文件和写文件,读写文件就是请求操作系统打开一个文件对象,然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

2.1 文件读取

文件读取可分为以下步骤:

  • 打开文件

  • 读取文件内容

  • 关闭文件

打开文件要使用open内建函数:

open(file [, mode='r', encoding=None, errors=None])

参数说明: file:文件路径,可以是相对路径和绝对路径

mode:文件打开模式

encodeing: 文件编码方式,不用于二进制文件,一般是utf-8,gbk

errors:指定如何处理编码和解码错误 ,适用于文本文件

返回值:一个可迭代的文件对象

mode 解释
r 只读
w 只写,写之前会清空文件的内容,如果文件不存在,会创建新文件
a 追加的方式,在原本内容中继续写,如果文件不存在,则会创建新文件
r+ 可读可写
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
b rb、wb、ab、rb+、wb+、ab+意义和上面一样,用于二进制文件操作

注意:二进制文件一般用于视频、音频、图片

读取文件常用函数:

函数 解释
read([size]) 读取文件(读取size字符,默认读取全部)
readline([size]) 读取一行,如果指定size,将读入指定的字符数
readlines() 把文件内容按行全部读入,返回一个包含所有行的列表
#打开文件
fp = open('qfile.txt','r',encoding='utf-8')
​
#读取文件全部内容
#content = fp.read()
#print(content)
​
#读取指定字符数,包括行尾的换行符\n
# print(fp.read(20))
​
#读取一行
# print(fp.readline(5))  #读取指定字符数
# print(fp.readline())  #读取一整行,直到碰到一个\n
​
#读取所有行,返回列表
# print(fp.readlines())
​
#关闭文件
fp.close() 
#由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。
# 所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
# try:
#     fp = open('qfile.txt','r',encoding='utf-8')
#     print(fp.readlines())
# finally:
#     fp.close()
#可以简写为:
#with语句会自动调用close方法关闭文件
with open('qfile.txt','r',encoding='utf-8')  as fp:print(fp.readline())
#fread()和freadlines()会一次读入文件全部内容,如果文件太大,会直接耗尽内存的,因为文件对象可迭代,所以可以用for循环遍历文件读取
with open('qfile.txt','r',encoding='utf-8')  as fp:for line in fp:print(line.strip())   #注意无论是read、readline、readlines都会读入行末的\n,所以需要手动剔除\n

2.2 写文件

path = "file11.txt"
​
#1.打开文件
f = open(path,"w",encoding="utf-8")
​
#2.写入内容,将内容写入到缓冲区
#不会自动换行,需要换行的话,需要在字符串末尾添加换行符
f.write("Whatever is worth doing is worth doing well该行很骄傲很关键\n")
​
​
#3.刷新缓冲区【加速数据的流动,保证缓冲区的流畅】
f.flush()
​
#4.关闭文件  关闭文件也会刷新缓冲区
f.close()
​
#简写方式:可以不用手动调用close
with open(path,"w",encoding="utf-8") as f1:f.write("Whatever is worth doing is worth doing well该行很骄傲很关键")

2.3 移动文件指针

文件是顺序向后读写的,如果想要移动文件指针,可以使用seek方法:

file_obj.seek(offset,whence=0)

功能:移动文件指针

参数:offset 是偏移量,正数表示从文件开头向文件末尾移动,负数相反。

whence : 文件指针的位置,可选参数,值可以是

SEEK_SET or 0 表示文件开头位置,是默认值

SEEK_CUR or 1 表示当前位置(不能使用)

SEEK_END or 2 文件末尾位置(不能使用)

返回值:无

#1.txt内容:hello world
with open('1.txt','r',encoding='utf-8') as fp:fp.seek(5)  #移动到hello后的空格位置print(fp.read(3))  #wofp.seek(0)   #移动到开头print(fp.read(5))  #helloprint(fp.tell())   #tell()显示当前指针位置

3.CSV文件操作

逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录。每个记录由一个或多个字段组成,用逗号分隔。使用逗号作为字段分隔符是此文件格式的名称的来源,因为分隔字符也可以不是逗号,有时也称为字符分隔值。

在Windows下,csv文件可以通过记事本,excel,notepad++,editplus等打开

  • 作用:CSV广泛用于不同体系结构的应用程序之间交换数据表格信息,解决不兼容数据格式的互通问题。

  • 需要导入csv模块

3.1 读取csv

import csv
with open(r'csv\winequality-red.csv') as fp:  #1.打开文件#delimiter指定分隔符csv_reader = csv.reader(fp,delimiter=';')  #2.获取csv读取器header = next(csv_reader) #获取第一行的标题print(header)for line in csv_reader: #3.遍历所有的行print(line)

3.2 写入csv

import csv
l1 = [[1,2,3],[4,5,6],[7,8,9]]
#打开文件时,要添加newline=''参数,否则会多一个空行
with open('1.csv','w',newline='') as fp: #1.打开文件#delimiter='\t'指定数据分隔符csv_writer = csv.writer(fp,delimiter='\t')  #2.获取writerfor line in l1:csv_writer.writerow(line)  #3.写入文件

【python】错误、异常和文件---复习笔记相关推荐

  1. python把异常写入文件_使用Python将Exception异常错误堆栈信息写入日志文件代码

    本篇文章小编给大家分享一下使用Python将Exception异常错误堆栈信息写入日志文件代码及补充知识,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看 ...

  2. Cris 的Python笔记(十三):异常和文件处理

    文章目录 1. Python 是如何处理异常的? 2. Python 中常用的文件处理语法(重点) 3. Python 处理二进制文件 4. seek 和 tell 方法 5. 文件操作之 os 包的 ...

  3. python中lastch_python复习笔记

    #python复习笔记 ##基础 1.下划线(_)在解释器中有特别的含义,表示最后一个表达式的值. Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Micr ...

  4. Python程序设计与科学计算精录总结Episode.3 Python高级语法:文件、异常、标准库和问题解决模式知识总结(基于Michael导师Python课程与VS2019)

    今天是2020年5月20日,这个对于博主来说平凡的一天,但社交媒体上早就炸开锅了. 博主认为,有些人受过伤之后,就爱的小心翼翼,迟迟不敢去再次追求自己的另一半,就这样,渐渐的过了能够大胆去爱的年纪,一 ...

  5. python错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

  6. python常见错误-新手常见Python错误及异常解决处理方案

    写Python代码的小伙伴不可避免地会遇到代码执行错误和异常,这次就来详细且不失通俗地总结一下python中的错误和异常. 先抛出两个问题: 什么是Python错误和异常? 如何处理Python错误和 ...

  7. python错误-第16天:Python 错误和异常

    by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...

  8. python判断正确错误_第16天:Python 错误和异常

    by 闲欢 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,这些报错信息就是我们接下来要讲的错误和异常. 我们在执行程序语句的时候,经常会看到命令行输出报错信息,例 ...

  9. Python 错误和异常

    我们在执行程序语句的时候,经常会看到命令行输出报错信息,例如: >>> while True print('Hello world')File "<stdin> ...

最新文章

  1. redis-3.0.2集群部署
  2. Android Kotlin Coroutines ktx扩展
  3. ABAP 标准培训教程 BC400 学习笔记之五:ABAP 编程语言的变量,常量和字面量,以及文本符号
  4. 1 加到 100 的 时间复杂度 C#.
  5. 整活插件 炉石传说_炉石传说:国服再搞大动作?官方插件神秘新功能压力测试开启...
  6. python3中property使用方法详解
  7. 美团都在用的实时应用监控平台,到底有多好用?
  8. TCP/IP网络协议栈:ARP协议详解
  9. windows服务器迁到_将文件服务器及域控制器从2003迁移至Windows Server 2008 R2
  10. 万字长文带你从头构建文本分类器
  11. bootstrap-table 表格加载中....处理
  12. 结构体(struct)的不同写法和tag前缀
  13. 孔浩javaScript原型的内存分析
  14. OC_键值编码KVC(Key-Value Coding)
  15. extjs6 表格行选中时去掉默认背景颜色
  16. 配置Ubuntu软件源
  17. c++实现远程开关机
  18. leetcode_83_Remove Duplicates from Sorted List
  19. Canvas—绘画圆弧
  20. 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc

热门文章

  1. awk 中 {print $1} 什么意思
  2. 关联表多数据的批量insert (批量导入,测试19W条数据用时46秒)
  3. 修改jquery文件上传插件uploadify的英文为中文
  4. d3代码如何改造成update结构(恰当处理enter和exit)
  5. 利用 Charles Proxy 下载旧版本 iOS App
  6. Windows下启动,关闭Nginx命令
  7. JDK的目录结构及结构图
  8. Oracle DB优化
  9. Audit(查看审核/审计信息)
  10. #pragma once 与 #ifndef比较分析