python初学 io流及异常和异常的处理
来源:互联网 发布:矩形螺纹怎么编程 编辑:程序博客网 时间:2024/06/05 22:21
python IO流
读写文件是最常见的IO操作。python内置了读写文件的函数。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统完成的,现代操作系统不允许普通的程序直接对磁盘进行操作,所以,
读写文件就是请求操作系统打开一个文件对象通常称为文件描述符,然后,通过操作系统提供的借口从这个文件中读取数据,或者把数据写入这个文件对象
读文件:
>>> f = open('/Users/michael/test.txt', 'r')
标示符'r'表示读,下面会为大家介绍具体的标示符。这样,我们就成功地打开了一个文件。
如果文件不存在,open()
函数就会抛出一个IOError
的错误,并且给出错误码和详细的信息告诉你文件不存在:
如果文件打开成功,接下来,调用read()
方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str
对象表示:
>>> f.read()'Hello, world!'
最后一步是调用close()
方法关闭文件。这样就是一套简单读文件的操作了。
写文件:
与读文件的步骤大致一样,只是要将标示符改为w,也就是我们open方法的第二个参数。这里就不做多的演示了。
二进制文件
前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'
模式打开文件即可
>>> f = open('/Users/michael/test.jpg', 'rb')>>> f.read()
字符编码
要读取非UTF-8编码的文本文件,需要给open()
函数传入encoding
参数,例如,读取GBK编码的文件:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')>>> f.read()
对于标示符的具体说明
python 异常
1. 抛出异常和自定义异常
Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。
①.raise 语句
Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示:
def ThorwErr(): raise Exception("抛出一个异常")# Exception: 抛出一个异常ThorwErr()
raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使用dir函数来查看exceptions中的异常类型,如下:
import exceptionsprint dir(exceptions)
传递异常
捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:
class MuffledCalculator: muffled = False def calc(self,expr): try: return eval(expr) except ZeroDivisionError: if self.muffled: print 'Division by zero is illegal' else: raise
②.自定义异常类型
Python中也可以自定义自己的特殊类型的异常,只需要要从Exception类继承(直接或间接)即可:
class SomeCustomException(Exception): pass
2. 捕捉异常
和C#中的try/catch类似,Python中使用try/except关键字来捕捉异常,如下:
# -- coding: utf-8 --try: print 2/0except ZeroDivisionError: print '除数不能为0'
①.捕捉多个异常
在一个except语句只捕捉其后声明的异常类型,如果可能会抛出的是其他类型的异常就需要再增加一个except语句了,或者也可以指定一个更通用的异常类型比如:Exception,如下:
# -- coding: utf-8 --try: print 2/'0'except ZeroDivisionError: print '除数不能为0'except Exception: print '其他类型异常'
为了捕获多个异常,除了声明多个except语句之外,还可以在一个except语句之后将多个异常作为元组列出来即可:
# -- coding: utf-8 --try: print 2/'0'except (ZeroDivisionError,Exception): print '发生了一个异常'
②.获取异常信息
每个异常都会有一些异常信息,一般情况下我们应该把这些异常信息记录下来:
# -- coding: utf-8 --try: print 2/'0'except (ZeroDivisionError,Exception) as e: # unsupported operand type(s) for /: 'int' and 'str' print e
3. finally子句
finally子句和try子句联合使用但是和except语句不同,finally不管try子句内部是否有异常发生,都会执行finally子句内的代码。所有一般情况下,finally自己常常用于关闭文件或者在Socket中。
# -- coding: utf-8 --try: print 2/'0'except (ZeroDivisionError,Exception): print '发生了一个异常'finally: print '不管是否发生异常都执行'
- python初学 io流及异常和异常的处理
- Python初学笔记-io流和异常
- IO流--IO异常的处理方式
- IO流FileWriter的IO异常处理
- IO异常 的处理
- IO异常的处理
- IO异常的处理
- io流的概述及字节流相关类的基本使用和异常处理
- Python异常和异常处理
- IO流(二)和异常处理
- java及Python处理异常的方式和各自的异常种类
- 标准的IO流异常的处理
- IO流的异常处理方式
- IO流_throws的方式处理异常
- python 引发异常 raise()及异常处理
- java的IO异常处理
- IO的异常处理方式
- IO流和异常
- SDUT 2141 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- PHP 面向对象
- Python
- CNN卷积神经网络层级结构
- Java反射机制构件详解
- python初学 io流及异常和异常的处理
- C++STL之vector
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 Agent Communication(图论)
- mybatis(2)增删改查
- 数据结构之顺序栈
- 素数表(Prime number table)
- Jzoj3443 压缩
- mac下 iterm+Zsh+Oh My Zsh+tmux 配置方案
- java 中解析json步骤