在上一篇文章中,我们介绍了 Python 的函数和模块,现在我们介绍 Python 中的异常和文件。

查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9963920.html

异常和文件

异常

异常也叫例外。在之前的几篇文章中,你已经看到过异常。当程序运行错误是出现,比如不正确的调用和代码不规范等。当你的程序出现意外情况是就会发生异常并终止运行。

下面代码用 5 除以 0 产生 ZeroDivisionError 异常。

num1 = 5num2=0print(num1/num2)

运行结果:

>>>ZeroDivisionError: division by zero>>>

不同的原因产生不同的异常,一般有:

ImportError:引入模块错误,通常是模块不存在。

IndexError:读取列表超出索引范围。

NameError:使用未声明的变量。

SyntaxError:代码语法错误。

TypeError:当操作或函数处理不合适类型。

ValueError:内建操作或函数,接收到类型正确,但值不正确。

Python 还有其他几个内置的异常,比如 ZeroDivisionError和 OSError。第三方库也经常定义自己的异常。

异常处理

我们使用try/except 语句捕捉程序运行时产生的异常。

try 块用来包含可能产生异常的代码块。如果产生异常 try 块停止运行,except 块里的代码开始执行,如果程序运行一切正常,则不会执行 except 块里的代码。

try:

num1= 5num2=0print(num1/num2)print("Done!")exceptZeroDivisionError:print("Has a error")print("due to zero division")

运行结果:

>>>Has a error

due to zero division>>>

上面的例子里 except语句定义了 ZeroDivisionError异常捕捉。

try语句可以拥有多个 except 定义语句来处理异常。多个异常也可以使用一个 except 块来捕捉。

try:

var= 5

print(var + "string!")print(var/2)exceptZeroDivisionError:print("Divided by zero!")except(ValueError,TypeError):print("Has a error!")

运行结果:

>>>Has a error!>>>

except 语句如果没有申明要铺获的异常,将捕获所有的异常。我们应该谨慎地使用这种异常处理方式,它虽然捕获了意外错误但是却把编程错误隐藏了。

try:

var= 5

print(var + "string!")print(var/2)except:print("An error occurred")

运行结果:

>>>An error occurred>>>

这种异常处理方式通常用在处理用户输入。

finally 语句

假设你正在读取一份文件。你应该确保文件对象被正确关闭,无论是否会发生异常。

为了确保代码最终能够运行不论是否有异常发生,我们可以使用 finally 语句。finally 放在try/except 语句的后面。

try:

str= "Hello"var= 5

print(str)print(var/0)exceptZeroDivisionError:print("Divided by zero")finally:print("This code will run no matter what")

运行结果:

>>>Hello

Divided by zero

This code will run no matter what>>>

下面代码会输出什么?

try:print(1)except:print("a")finally:print("Hello")

运行结果:

>>>

1Hello>>>

finally 语句最终会被执行不管前面的异常到没有捕捉到,包括在 except 语句里产生的异常。

try:print(1)print(5/0)exceptZeroDivisionError:print(Error_var)finally:print("This is executed last!")

运行结果:

>>>

1

This is executed last!

ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

NameError: name 'Error_var' is not defined

>>>

抛出异常

使用 raise 语句抛出一个异常

print(1)raiseZeroDivisionErrorprint(5)

运行结果:

>>>

1ZeroDivisionError>>>

你需要声明你要抛出的例外名称。

抛出的异常可以用参数来指出这是什么错误。

age = 12

raise TypeError("Invalid type!")

运行结果:

>>>TypeError("Invalid type!")>>>

在 except 块里,raise 语句可以不用声明异常的名称重新抛出捕捉到的异常。

try:

num= 5/0except:print("Has a error")raise

运行结果:

>>>ZeroDivisionError: division by zero

Has a error>>>

断言

Python 的断言就是检测一个条件。如果条件为真,它什么都不做,条件为假会触发一个错误信息。

断言可以打开或关闭。断言使用 assert 语句声明。

print(1)assert 1 + 2 == 3

print("Yes")assert 1 + 1 ==0print("Yes")

运行结果:

>>>

1Yes

AssertionError>>>

程序员通常在函数的开头放置断言以检查有效的输入,在函数调用之后放置断言以检查有效的输出。

断言可以在运行是通过添加-O 或 -OO 选项来关闭。

下面代码打印出来什么?

print(1)assert 1 != 2

print(2)assertTrueprint(3)assertFalseprint(4)assert 1 + 1 == 2

print(5)

运行结果:

>>>

1

2

3AssertionError>>>

断言的第二个参数可以用来给 AssertionError 做参数。

num = 5

assert (num <= 0),"The num is bigger than zero"

运行结果:

>>>AssertionError: The numisbigger than zero>>>

AssertionError异常可以像任何其他异常一样使用try/except语句被捕捉和处理,如果程序不处理,这种类型的异常将终止程序的运行。

文件处理

打开文件

读写文件是最常见的 IO(输入输出)操作。Python 内置了读写文件的函数,要读写文件需要打开一个文件对象,使用 open 函数。

open 函数打开的对象在 Python 中统称为file-like Object。除了文件外,还可以是内存的字节流,网络流,自定义流等等。

f = open("test.txt")

注意:open函数的参数是文件的路径。如果文件与程序位于同一个目录中,则可以不要指定路径直接使用文件名。

可以使用 open 函数的第二个参数来指定打开文件的模式。

#read mode

open("test.txt", "r")

open("test.txt")#write mode

open("test.txt", "w")#binary write mode

open("test.txt", "wb")

打开文件模式列表:

特别注意:使用 "w" 模式时,如果文件已经存在,会把旧文件的内容全部都清除掉。

文件打开后应该使用 close 方法关闭文件。

f = open("test.txt","w")#close the file

f.close()

接下来我们会读取和写入文件。

读取文件

使用 open 方法打开的文件可以使用 read 方式来读取内容。

f = open("test.txt","r")

content=f.read()print(content)

f.close()

打印文件名为 "test.txt" 的所有内容。

若要读取一定数量的文件内容,可以使用一个数字作为参数来调用 read 函数。该数字确定要读取多少个字节的内容。

可以对同一个文件对象进行多次的 read 调用,该字节读取文件内容。在没有参数的情况下,read 函数返回文件的其余部分。

f = open("test.txt","r")print(f.read(32))print(f.read(16))print(f.read(8))print(f.read())

f.close()

当所有的内容被读取后,再调用 read 函数返回空字符串。

f = open("test.txt","r")

f.read()print("reading")print(f.read())print("finished!")

f.close()

运行结果:

>>>

reading

finished!>>>

打开一个文件读取它的内容,打印内容的长度。

f = open("test.txt","r")

str=f.read()print(len(str))

f.close()

运行结果:

>>>

16

>>>

要一行一行地读取,我们可以使用 readline 方法,也使用 readlines 一次读取所有内容并返回一个列表,列表里的每一项元素表示一行内容。

f = open("test.txt","r")print(f.readlines())

f.close()

运行结果:

>>>['I like Python!!!']>>>

使用 for 语句遍历文件的每一行:

f = open("test.txt","r")for line inf:print(line)

f.close()

运行结果:

>>>Line1: Hello world!

Line2: I like Python!

Line3: I like Java!>>>

在输出中,返回的行包含换行符,打印 print函数在输出的末尾自动添加新行。

写文件

使用 write 方法把内容写到文件里。

f = open("test.txt","w")

f.write("I am happy!")

f.close()

f= open("test.txt","r")print(f.read())

f.close()

运行结果:

>>>I am happy!>>>

如果文件不存在,"w" 将会创建一个文件。

写入模式下,如果文件存在将清除全部内容并往文件写入新内容。

f = open("test.txt","r")print("Reading...")print(f.read())print("Finished!")

f.close()

f= open("test.txt","w")

f.write("New text")

f.close()

f= open("test.txt","r")print("Reading new contents")print(f.read())print("Finished!")

f.close()

运行结果:

>>>Reading...

I am happy!

Finished!

Reading new contents

New text

Finished!>>>

特别注意:原有的文件将被新内容重写。

如果 write 写入成功,方法返回写入的字节数。

msg = "I like Python!!!"f= open("test.txt","w")

count=f.write(msg)print(count)

f.close()

运行结果:

>>>

16

>>>

读写文件

确保文件在使用后始终关闭,避免浪费资源是良好的编程习惯。我们使用try/finally 语句。

try:

f= open("test.txt")print(f.read())finally:

f.close()

当异常发生时也能确保文件对象被正确关闭。

每次都这样要关闭文件是在太繁琐。所以,Python 引入了 with 语句来帮我们自动调用close() 方法。

with open("test.txt") as f:print(f.read())

使用 with语句打开文件是个好习惯,就算有例外发生,with语句也会自动帮我们关闭文件句柄。

python文件操作与异常处理_Python学习——文件操作和异常处理相关推荐

  1. python异常处理_Python学习点滴04 - 学会异常处理(2)

    前言 我们在开发Python程序时经常会遇到一些错误(语法错误和异常),尤其是程序代码发生异常(Exceptions)时,如果不能及时捕获异常和有效处理异常,则程序运行会被终止,有可能会造成相应的后果 ...

  2. python 文件操作不被打断_python学习六文件操作和异常处理

    1.文件的定义和类型 什么是文件呢? 文件是数据的抽象和集合 文件是存储在辅助存储器上的数据序列 文件是存储的一种 文件有哪些类型呢? 本质上所有文件以二进制储存,不过又可以分为文本文件和二进制文件 ...

  3. python读取文件需要的异常处理_Python基础:文件的简单读取和操作以及异常处理...

    Python提供了直接获取文件对象的方法,方便我们直接操作文件. 下面我们就使用Python对文件的读取.写入以及数据存储进行整理说明,以及Python对异常的处理. 获取文件对象 打开一个txt文件 ...

  4. python写完程序保存_Python学习笔记——文件处理

    1.文件路径 1.1 不同系统环境下的路径 1.2 当前工作目录 1.3 绝对路径和相对路径 1.4 新建文件夹-- os.makedirs() 2.文件的读写 2.1 打开文件 2.2 读写文件 3 ...

  5. python文件读取与输出_python基本文件操作(文件输入和输出)

    文件输入输出中常用的文件对象方法: open: 返回一个新的文件对象,调用该对象的上的方法可对文件进行任何操作 readline: 读取一行数据包括结尾的换行符在内 write: 将数据写入文件中 c ...

  6. python获取当前路径导包_python 通过文件夹导入包的操作

    通过文件夹导入包要求每个目录下都有一个__init__.py文件,此文件可空白.也可不空.a@ubuntu:~/Desktop$ tree myp myp ├── a │ ├── b.py │ └── ...

  7. python在文件中写入字典_python初学--文件操作、字典

    文件读写 1.先打开文件 2.读取/写入内容 3.保存文件 文件的open模式有三种 1.w 写模式,它是不能读的 只要用w打开文件,文件中的东西都会被清空 w+, 写读模式,只要沾上w 就会清空原来 ...

  8. python创建文件对象的函数_Python学习笔记之—— File(文件) 对象常用函数

    file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 1.file.close() close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触 ...

  9. python不是内部文件别太任性_Python对文件的操作

    Python的文件操作 什么是IO 在计算机中 I/O 是指 Input/Output,即 Stream (流)的输入和输出,输入和输出是相对于内存来说的.程序运行时数据都驻留在在内存当中,由 CPU ...

最新文章

  1. Java日志的心路历程
  2. NetDevOps — PyEZ
  3. Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
  4. 【跃迁之路】【535天】程序员高效学习方法论探索系列(实验阶段292-2018.07.25)...
  5. 002-请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步...
  6. [Kubernetes] 如何关联PVC到特定的PV
  7. mysql建表_128、mysql建表和简单sql
  8. (转) Dockerfile 中的 COPY 与 ADD 命令
  9. 好的文案,极大的降低沟通成本
  10. 宠物兽医体层摄影术行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  11. 浅谈摄某网绕过图片水印查看下载无水印图片
  12. “中华酷联米”第一阵营形成 小米梦如何继续
  13. 前端内容安全策略(csp)
  14. UART使用EDMA收发
  15. 正确地使用“respectively“
  16. Jedis scan及其count的值
  17. 计算机维修工初级题库网盘,初级计算机维修工技能试卷.pdf
  18. 宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清
  19. GAMES101 梳理 / 个人向图形学笔记
  20. python调用IDM

热门文章

  1. UVALive 4225 Prime Bases 贪心
  2. C++之全局函数和成员函数互相转换
  3. Windows下的cmd小技巧
  4. EOS账户系统(1)场景
  5. 《极速切水果游戏》有Python版了,曾风靡一时的手游能否富过“二代”?
  6. optee的RPC设计(模型)详解
  7. linux kernel的spinlock代码导读和分析
  8. optee的异常向量表-(irq,fiq,svc...)
  9. 运维的基本知识点及分类工作
  10. (34)内核编程基础