Python学习手册之Python异常和文件
在上一篇文章中,我们介绍了 Python 的函数和模块,现在我们介绍 Python 中的异常和文件。
查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9963920.html
异常和文件
异常
异常也叫例外。在之前的几篇文章中,你已经看到过异常。当程序运行错误是出现,比如不正确的调用和代码不规范等。当你的程序出现意外情况是就会发生异常并终止运行。
下面代码用 5 除以 0 产生 ZeroDivisionError 异常。
num1 = 5 num2 = 0 print(num1/num2)
运行结果:
>>> ZeroDivisionError: division by zero >>>
不同的原因产生不同的异常,一般有:
ImportError:引入模块错误,通常是模块不存在。
IndexError:读取列表超出索引范围。
NameError:使用未声明的变量。
SyntaxError:代码语法错误。
TypeError:当操作或函数处理不合适类型。
ValueError:内建操作或函数,接收到类型正确,但值不正确。
Python 还有其他几个内置的异常,比如 ZeroDivisionError 和 OSError。第三方库也经常定义自己的异常。
异常处理
我们使用 try/except 语句捕捉程序运行时产生的异常。
try 块用来包含可能产生异常的代码块。如果产生异常 try 块停止运行,except 块里的代码开始执行,如果程序运行一切正常,则不会执行 except 块里的代码。
try:num1 = 5num2 = 0 print(num1/num2) print("Done!") except ZeroDivisionError: 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) except ZeroDivisionError: 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) except ZeroDivisionError: 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")
运行结果:
>>> 1 Hello >>>
finally 语句最终会被执行不管前面的异常到没有捕捉到,包括在 except 语句里产生的异常。
try: print(1) print(5/0) except ZeroDivisionError: 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) raise ZeroDivisionError print(5)
运行结果:
>>> 1 ZeroDivisionError >>>
你需要声明你要抛出的例外名称。
抛出的异常可以用参数来指出这是什么错误。
age = 12 raise TypeError("Invalid type!")
运行结果:
>>> TypeError("Invalid type!") >>>
在 except 块里,raise 语句可以不用声明异常的名称重新抛出捕捉到的异常。
try:num= 5/0 except: print("Has a error") raise
运行结果:
>>> ZeroDivisionError: division by zeroHas a error >>>
断言
Python 的断言就是检测一个条件。如果条件为真,它什么都不做,条件为假会触发一个错误信息。
断言可以打开或关闭。断言使用 assert 语句声明。
print(1) assert 1 + 2 == 3 print("Yes") assert 1 + 1 == 0 print("Yes")
运行结果:
>>> 1 Yes AssertionError >>>
程序员通常在函数的开头放置断言以检查有效的输入,在函数调用之后放置断言以检查有效的输出。 断言可以在运行是通过添加 -O 或 -OO 选项来关闭。
下面代码打印出来什么?
print(1) assert 1 != 2 print(2) assert True print(3) assert False print(4) assert 1 + 1 == 2 print(5)
运行结果:
>>> 1 2 3 AssertionError >>>
断言的第二个参数可以用来给 AssertionError 做参数。
num = 5 assert (num <= 0),"The num is bigger than zero"
运行结果:
>>> AssertionError: The num is bigger 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()
运行结果:
>>>readingfinished! >>>
打开一个文件读取它的内容,打印内容的长度。
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 in f:print(line) f.close()
运行结果:
>>> Line 1 : Hello world!Line 2 : I like Python!Line 3 : 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 语句也会自动帮我们关闭文件句柄。
“朝着一个方向疯狂奔跑的感觉,真好。”
转载于:https://www.cnblogs.com/dustman/p/9979931.html
Python学习手册之Python异常和文件相关推荐
- python学习手册条件-Python学习手册(第4版)pdf
Python学习手册(第4版) 内容简介 <Python学习手册(第4版)>学习Python的主要内建对象类型:数字.列表和字典.使用Python语句创建和处理对象,并且学习Python的 ...
- python学习手册条件-Python学习手册之控制结构(一)
在上一篇文章中,我们对 Python 进行了简单介绍和介绍了 Python 的基本语法,现在我们继续介绍 Python 控制结构. 查看上一篇文章请点击:https://www.cnblogs.com ...
- python学习手册视频教程-Python学习精品教程,视频书籍打包下载
这是Python书籍打包下载的地址,在下载之前,我首先要感谢分享资源的一位朋友(QQ的网名叫:破斧盛粥,非常感谢)链接:https://pan.baidu.com/s/1jMLa3mDcMfX9KaV ...
- Python学习手册之Python介绍、基本语法(二)
在上一篇文章中,我们介绍了Python的一些基本语法,现在我们继续介绍剩下的Python基本语法.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/987193 ...
- python学习手册教程_python学习手册:如何学习python学习教程?
常听人说:选择不对,努力也白费!如今互联网行业火热,越来越多人加入到Python.JAVA.HTML5.大数据的领域来.关于学Python.JAVA.HTML5.大数据到底哪个编程语言好?小编不能帮你 ...
- python学习手册条件-总算晓得python学习手册正式版
为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...
- python学习手册中文版免费下载-Python学习手册
Python学习手册第4 版将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者.本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成 ...
- python学习手册中文版免费下载-Python学习手册 第三版
<Python学习手册(第3版)>讲述了:Python可移植.功能强大.易于使用,是编写独立应用程序和脚本应用程序的理想选择.无论你是刚接触编程或者刚接触Python,通过学习<Py ...
- python学习手册中文版免费下载-Python学习手册(第3版)
<Python学习手册(第3版)>为机械工业出版社出版. 目录 前言 第一部分 使用入门第1章 问答环节 人们为何使用Python 软件质量 开发者效率 Python是"脚本语言 ...
- python基础语法手册-Python学习手册(第4版)pdf
Python学习手册(第4版) 内容简介 <Python学习手册(第4版)>学习Python的主要内建对象类型:数字.列表和字典.使用Python语句创建和处理对象,并且学习Python的 ...
最新文章
- web网站服务(二)
- Buffer Pool--内存总结2
- android中线程和进程
- Java 中的位运算
- 连接池超时配置_HttpClient连接池的一些思考
- TCP 连接中的TIME_WAIT
- 考拉海购全面云原生迁移之路
- C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem
- bzoj 3114: Uva12546 Lcm Pair Sum
- 将Java程序作成exe文件的几种方法
- r语言算巢式设计方差分析_R语言入门之效力分析(Power Analysis)
- php一行代码实现人脸识别,一行代码搞定人脸识别
- CubeMX配置SPI-Flash(W25Q256)
- [极客时间] 时间复杂度和空间复杂度分析
- 计算机网络技术人员素质要求,做网络技术员需要学习哪些技能
- unity shader projector使用
- 哈希原理与常见哈希函数
- ElementUI el-input 设置 type 类型为 number 时,如何去掉上下指示箭头
- AIOC4专业版快速修复CAD文件关联,双击dwg文件没反应
- 为什么要用PolyFill(JS中的修补匠)
热门文章
- SAMBA+LDAP ERROR“smbd dead but pid file exists”
- 硬盘是计算机的 奥鹏,奥鹏计算机应用基础一教学内容.docx
- 【侯捷】C++面向对象高级编程(下)
- Gamecenter 测试失败的解决方案
- 赵丽颖冯绍峰官宣 | 微博服务器瘫痪!运维:该拿什么拯救我?
- 让你立刻爱上数学的10个算术游戏
- BZOJ 3786: 星系探索 ETT
- 2018年支付行业回顾
- SQL“除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效“ 解决方法
- uvc和v4l2简介