在函数调用的过程中,假设函数里面有循环嵌套的函数,那么在里面的函数遇到异常的时候,就终止函数,后面的语句将不会执行,而try后面的语句也将会中止执行,转而except。
异常其实也是一个类,是一个对象
此外,如果没有错误发生,可以在except语句块后面加一个else,当有错误发生时,会自动执行else语句
Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里
使用try…except捕获错误还有一个巨大的好处,就是可以跨越多层调用,也就是说,不需要在每个可能出错的地方去捕获错误只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写try…except…finally的麻烦。
我们自己编写的函数也可以抛出错误,如果要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后,用raise语句抛出一个错误的实例,只有在必要的时候才定义我们自己的错误类型。如果可以选择Python已有的内置的错误类型(比如ValueError,TypeError),尽量使用Python内置的错误类型
对于系统自己检查错误,一旦在某处检测到错误的话,就会停止后面的程序运行,而再有必要检测的地方写一个try的话,那么在try后面的代码快中,如果有异常的话,就只终止代码块里面的代码,然后抛出异常,但会继续执行后面的程序
IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。对于浏览网页来说,浏览器和新浪服务器之间至少需要建立两根水管,才可以既能发数据,又能收数据.
第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;
另一种方法是CPU不等待,只是告诉磁盘,“您老慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO。
对于文件的打开的时候需要注意的是,我们要打开的文件的大小是多少,如果10G那么内存可能就不够用,所以我们可以f.read(size),设置读取的时候的大小,f.readline(),读一行
open(),函数中可以使用四个参数,第一个表示文件的位置,第二个表示文件的打开方式,第三个表示要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,第四个参数是当出现错误编码时该如何处理,error参数, errors=’ignore’,表示忽略
在我们往文件中些数据的时候,写完以后一定要close(),因为在写的过程中系统不会直接把数据写入文件中,而是先写入缓存中,然后再写入文件中,如果我们写完后不close,那么数据有可能没有全部写入文件中,就会出现丢失
utf-8编码,这个可以理解为一般的汉字,字符串,数字,日期等这些字符,经过utf-8编码以后全部变成01二进制文件,一个文件中既可以村这个经编码的二进制文件,又可以存普通数据
当我们需要往内存中直接写str的时候,我们就需要IO模块里面的StringIO()函数,这里注意python是区分大小写的,这里其实往内存中直接写str就相当于,在内存中申请了一个小空间用来写str
具体做法,首先import IO模块里面的StringIO,然后f=StringIO()这句话就相当于把这块空间取名是f,也可把f理解为一个在内存中的文件,然后就可以用f.write(‘’)
将字符串写入这个f空间中,读取的时候可以用readlines(),也可以用print(f.getvalues())函数进行读取
如果要写入的是二进制文件,则用的是BytesIO函数,只是在调用write函数的时候要多一个utf-8编码而已,例如:f.write(‘中文’.encode(‘utf-8’)),然后后面的操作和StringIO一样
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/bx1246118099/article/details/47337341