作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息。Python有两种错误很容易辨认:语法错误和异常。
即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。大多数的异常都不会被程序处理,都以错误信息的形式展现。异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 例子中的类型有 ZeroDivisionError,NameError 和 TypeError。
错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息
捕捉异常可以使用try/except语句。 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它
try:
#运行别的代码
except :
#如果在try的部分发生异常,执行的语句
except ,:
#如果在try的部分发生异常,获得附加的数据执行的语句
else:
#如果没有发生异常,执行的语句
无论try语句块中是否触发异常,都会执行finally子句中的语句块,因此一般用于关闭文件或关闭因系统错误而无法正常释放的资源。比如文件关闭,释放锁,把数据库连接返还给连接池等
try:
normal execution block
except A:
exception A handle
except B:
exception B handle
except C:
exception C handle
else:
if no exception get here
finally:
print('finally')
try:
normal execution block
except (A,B,C) as e: # e获取错误类型的详细信息
exception e handle
else:
if no exception get here
finally:
print('finally')
以代码中,我们可以使用raise关键字来自定义异常:
raise [Exception [, args [, traceback]]]
例如:
try:
name = input('输入变量名称:')
if name.isdigit():
raise NameError('bad name!')
except NameError as e:
print(e)
总结
1.except语句不是必须的,finally语句也不是必须的,但是二者必须要有一个,否则就没有try的意义了。
2.except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。
3.except语句可以以元组形式同时指定多个异常,参见实例代码。
4.except语句后面如果不指定异常类型,则默认捕获所有异常,你可以通过logging或者sys模块获取当前异常。
5.如果要捕获异常后要重复抛出,请使用raise,后面不要带任何参数或信息。
6.不建议捕获并抛出同一个异常,请考虑重构你的代码。
7.不建议在不清楚逻辑的情况下捕获所有异常,有可能你隐藏了很严重的问题。
8.尽量使用内置的异常处理语句来 替换try/except语句,比如with语句,getattr()方法。
任何一种语言,文件的读写都是非常常见的。python的文件读写非常简单,仅仅一个函数open
常用打开模式:
1、r 只能读
2、r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
3、w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
4、w 只能写,覆盖整个文件,不存在则创建
5、a 只能写,从文件底部添加内容 不存在则创建
6、a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
注:不建议用r+的方式去写入文件,会使之前的文件不完整。
file = open('D:\\test.txt') #默认为r,只读模式
content = file.read()
print(content)
file.close()
使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
file = open('thefile.txt')
try:
all_the_text = file.read()
finally:
file.close()
注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file无法执行close()方法。
读文件,读文本文件
input = open('data', 'r') #第二个参数默认为r
读二进制文件
input = open('data', 'rb')
with open('D:\\test.txt','r+') as f,open('F:\\test.txt','r+') as d:
content = f.read()
print(content)
with open 打开文件的方式,可以不用调用close()方法
文件的读取方式
file = open('thefile.txt')
content = file.read() #读取所有内容
content_party = file.read(100) #读取固定字节
content_oneline = file.readline() #读取一行内容
content_all = file.readlines() #读取每一行内容
前面主要是怎么读文件,那么写文件这么做呢?
1.写文本文件
output = open('data', 'w')
2.写二进制文件
output = open('data', 'wb')
3.追加读文件
output = open('data', 'w+')
4.写数据
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )
5.写入多行
file_object.writelines(list_of_text_strings)
注意,调用writelines写入多行在性能上会比使用write一次性写入要高。
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。
特征:
纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312
由记录组成(典型的是每行一条记录)
每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分 隔符可以包括可选的空格)
每条记录都有同样的字段序列。
CSV文件规则:
1 开头是不留空,以行为单位。
2 可含或不含列名,含列名则居文件第一行。
3 一行数据不跨行,无空行。
4 以半角逗号(即,)作分隔符,列为空也要表达其存在。
5 列内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来。
6 文件读写时引号,逗号操作规则互逆。
7 内码格式不限,可为 ASCII、Unicode 或者其他。
8 不支持特殊字符
通常CSV文件开头是不留空的,以行为单位,每行中记录一张图片的多项数据,每项数据用逗号来分割(英文逗号)。一般来说,集图用的.CSV文件格式是:
文件名,文件大小(以字节为单位),CRC校验值,注释(可省略)
如果电脑上安装了Microsoft Excel 的话 .CSV文件默认是被Excel打开的
读文件
import csv
csv_reader = csv.reader(open('D:/test.csv'))
for row in csv_reader:
print(row)
import csv #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open()
with open('D:/test.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
print(row)
写文件
import csv
list = ['1', '2','3','4','5']
outfile = 'D:/test.csv'
out = open(outfile, 'a')
csv_writer = csv.writer(out)
csv_writer.writerow(list) 可能遇到的问题:直接使用这种写法会导致文件每一行后面会多一个空行
out = open(outfile, 'a', newline='')
csv_writer = csv.writer(out)
csv_writer.writerow(list)