python菜鸟日记6

  1. 在函数调用的过程中,假设函数里面有循环嵌套的函数,那么在里面的函数遇到异常的时候,就终止函数,后面的语句将不会执行,而try后面的语句也将会中止执行,转而except。
  2. 异常其实也是一个类,是一个对象
  3. 此外,如果没有错误发生,可以在except语句块后面加一个else,当有错误发生时,会自动执行else语句
  4. Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里
  5. 使用try…except捕获错误还有一个巨大的好处,就是可以跨越多层调用,也就是说,不需要在每个可能出错的地方去捕获错误只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写try…except…finally的麻烦。
  6. 我们自己编写的函数也可以抛出错误,如果要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后,用raise语句抛出一个错误的实例,只有在必要的时候才定义我们自己的错误类型。如果可以选择Python已有的内置的错误类型(比如ValueError,TypeError),尽量使用Python内置的错误类型
  7. 对于系统自己检查错误,一旦在某处检测到错误的话,就会停止后面的程序运行,而再有必要检测的地方写一个try的话,那么在try后面的代码快中,如果有异常的话,就只终止代码块里面的代码,然后抛出异常,但会继续执行后面的程序
  8. IO编程中,Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。对于浏览网页来说,浏览器和新浪服务器之间至少需要建立两根水管,才可以既能发数据,又能收数据.
  9. 第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;

    另一种方法是CPU不等待,只是告诉磁盘,“您老慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO。

  10. 对于文件的打开的时候需要注意的是,我们要打开的文件的大小是多少,如果10G那么内存可能就不够用,所以我们可以f.read(size),设置读取的时候的大小,f.readline(),读一行
  11. open(),函数中可以使用四个参数,第一个表示文件的位置,第二个表示文件的打开方式,第三个表示要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,第四个参数是当出现错误编码时该如何处理,error参数, errors=’ignore’,表示忽略
  12. 在我们往文件中些数据的时候,写完以后一定要close(),因为在写的过程中系统不会直接把数据写入文件中,而是先写入缓存中,然后再写入文件中,如果我们写完后不close,那么数据有可能没有全部写入文件中,就会出现丢失
  13. utf-8编码,这个可以理解为一般的汉字,字符串,数字,日期等这些字符,经过utf-8编码以后全部变成01二进制文件,一个文件中既可以村这个经编码的二进制文件,又可以存普通数据
  14. 当我们需要往内存中直接写str的时候,我们就需要IO模块里面的StringIO()函数,这里注意python是区分大小写的,这里其实往内存中直接写str就相当于,在内存中申请了一个小空间用来写str
  15. 具体做法,首先import IO模块里面的StringIO,然后f=StringIO()这句话就相当于把这块空间取名是f,也可把f理解为一个在内存中的文件,然后就可以用f.write(‘’)

    将字符串写入这个f空间中,读取的时候可以用readlines(),也可以用print(f.getvalues())函数进行读取

  16. 如果要写入的是二进制文件,则用的是BytesIO函数,只是在调用write函数的时候要多一个utf-8编码而已,例如:f.write(‘中文’.encode(‘utf-8’)),然后后面的操作和StringIO一样

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 10:25:44

python菜鸟日记6的相关文章

python菜鸟日记2

1.对于类之间的的子类关系是可以传递的:比如C1是C2的子类,C2是C3的子类,那么C1也是C3的子类,任何类都可以看成是自身的子类,class类里面也可以嵌套一个class类 2.在类中,要想在函数中引用类的属性(全局变量),就必须使用完整名称(类名.变量名),而对于在类体中的语句,想引用类的属性,就必须使用属性的简单名称 例如: class c(): x=55 y=x+66                   --必须使用简单名称 def b(): f=c.x**3            

python菜鸟日记7

1. 如果直接在操作系统中进行命令行操作,那么一般使用的是操作系统所提供的接口函数,而如果想在python中也能够调用操作系统的接口函数来对文件,目录进行操作的话,可以使用os和os.path模块,这些模块可以直接调用操作系统提供的接口函数 2. >>>os.name ,name属性会反映出操作系统的一些信息,如果是posix,说明系统是Linux.Unix或Mac OS X,如果是nt,就是Windows系统,要获取详细的系统信息,可以调用uname()函数,注意uname()函数在W

python菜鸟日记4

1.在python中,0,'',{},(),[],空值,空列表,等等,都表示假值,反之都是真值在逻辑运算and,or中,返回的不是true或者false,返回的是逻辑运算符两边的其中一个值,而对于算数运算符, ==,!=,>,<,这些才返回的是true或者false 2.and,从左到右运算,当两边,都是真值时,返回最后一个真值,当两边都是假值时,就返回第一个假值,当同时存在真假值时,则返回第一个假值,其实,记法可根据逻辑运算结果记 例如: >>> 'a' and 'b' '

python菜鸟日记5

1.在python中我们可以导入模块,来调用模块里面的函数,在一个模块中,我们可以定义很多的函数和变量,但有些函数我们并不希望被别人使用,只希望在模块内部使用,那么,我们 可以通过_(下划线)前缀来实现,比如_ABC,_qiuhe,但是python并没有强制限制访问函数或变量,只是一种编程的习惯而已 2.在python中,pip是一个包管理工具,我们通过它来安装第三方软件的,一般来说,第三方库都会在Python官方的pypi.python.org网站注册,我们进入该网址,然后搜索我们要下载的模块

python菜鸟日记8

1. python中的多进程编程概念:由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持.multiprocessing模块就是跨平台版本的多进程模块.multiprocessing模块提供了一个Process类来代表一个进程对象. 2. python中的多线程编程具体做法:当我们引入该multiprocessing模块后,对需要进行调用的函数创建进程:b= Process(target=函数名, args=(实参,)),因为process是一个类,所以b就是一个target函数的

Python菜鸟晋级03----repr() 与str() 函数的区别

两者均是将数值转换成字符串的形式,但是有细微的区别 str()会创建一个适合人阅读的字符串. repr()会创建适合解释器阅读的字符串. >>> hello = 'hello, world\n' >>> hellos = repr(hello) >>> hellos "'hello, world\\n'" #出现反斜杠进行转意 >>> hellos=str(hello) >>> hellos 'h

Python菜鸟晋级06----特殊属性整理

Python一切皆对象(object),每个对象都可能有多个属性(attribute). #现在我们来总结下所有的系统定义属性和方法, 先来看下保留属性: >>> Class1.__doc__ # 类型帮助信息 'Class1 Doc.' >>> Class1.__name__ # 类型名称 'Class1' >>> Class1.__module__ # 类型所在模块 '__main__' >>> Class1.__bases__

Python菜鸟之路:Django 路由补充FBV和CBV

在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view . 今天补充另外一种路由关系的写法:CBV,即:class base view , 也可以看做为面向资源编程的另外一种叫法,类似tornado中的路由写法. 1. 建立路由关系urls.py from app01 import views urlpatterns = [ url(r'^home/', views.Hom

Python菜鸟晋级08----str.format()方法

用法 str.format()方法会返回一个新的字符串,在新的字符串中,原字符串的替换字段(大括号中和数字是预留的替换字段)被format方法中的参数代替. 替换字段被format方法中参数代替有一下集中形式------------------------- 按照位置 '{0},{1}'.format('kzc',18) #按照替换字段中的数字带入format方法中的参数 'kzc,18' '{},{}'.format('kzc',18) #替换字段中没有数字就按照顺序带入format方法中的参