龙空技术网

python自学教程(四)异常与文件

极客饕餮 208

前言:

此时兄弟们对“open函数打开文件失败原因是”可能比较关心,看官们都想要分析一些“open函数打开文件失败原因是”的相关知识。那么小编在网上汇集了一些有关“open函数打开文件失败原因是””的相关文章,希望我们能喜欢,小伙伴们一起来了解一下吧!

一 异常

错误的代码或输入会引发异常.发生异常时,程序立即停止.

num1=7

num2=0

print(num1/num2)

这将产生ZeroDivisionError异常

ZeroDivisionError:division by zero

常见的异常以及引发的原因:

ImportError:无法引入模块或包

IndexError:下标索引超出序列边界.

NameError:使用一个还未赋予对象的变量.

SyntaxError:语法错误

TypeError:传入的对象类型与要求不符.

ValueError:传入一个不被期望的值,即使类型正确

KeyError:试图访问字典里不存在的键

IOError:输入输出异常

python还有一些内置的异常,如:ZeroDivisionError和OSError

第三方库也有自己的异常.

二 异常处理

try/except

try块包含可能会引发异常的代码.如果发生该异常,try块中的代码将停止执行.并且except块中的代码将被运行.如果没有发生错误,except块中的代码不会运行.

try语句可以有多个不同的except块来处理不同的异常.可以使用圆括号将多个异常放在一起.

try:

variable=10;

print(varible+"hello")

print(variable/2)

except ZeroDivisionError:

print("divided by zero")

except (ValueError,TypeError):

print("Error occured")

结果:Error occured

没有指定任何异常的except语句将捕获所有错误.但是,这样会捕捉到意想不到的错误并隐藏编程错误.

例如:

try:

word="spam"

print(word/0)

except:

print("发生错误")

结果:发生错误

●在处理用户输入时,异常处理特别有用.

三 finally语句

为了确保某些代码不管发生什么错误都运行,可以使用finally语句.finally语句放置在try/except语句的底部.finally语句中的代码总是在try中的代码执行之后运行,可能在except代码块中运行.

try:

print("hello")

print(1/0)

except ZeroDivisionError:

print("divided by zero")

finally:

print("这段代码无论如何都会运行")

结果:

四 引发异常

raise 人为主动引发异常

print(1)

raise ValueError

print(2)

结果:

需要指定引发异常的类型. 引发异常后的代码就不会执行了

●引发异常可以提供一些异常的描述

name="123"

raise NameError("Invalid name!")

结果:

NameError:Invalid name!

●在except块下,raise语句可以在没有参数的情况下使用来重新引发发生的异常.

try:

num=5/0

except:

print("An error occured!")

raise

结果:

五 断言

assert 后边的语句为真,则正常运行.如果assert后边的语句为假,则会触发AssertionError

pint(1)

assert 2+2==4

print(2)

assert 1+1==3

print(3)

结果:

程序员经常在函数的开始处放置断言来检查有效的输入,并且在函数调用之后检查有效的输出.

●如果断言失败,assert可以接受第二个传递给AssertionError的参数.

temp=-10

assert (temp>=0),"Colder than absolute zero!"

结果:

AssertionError:Colder than absolute zero!

AssertionError异常可以像使用try-except语句的任何其他异常一样被捕获和处理,但是如果不处理,这种类型的异常将终止程序.

六 打开文件

使用open函数打开文件.

myfile=open("filename.txt")

open函数的参数是文件的路径.如果文件与程序位于同一目录,可以直接使用文件名称.

◆可以通过向open函数应用第二个参数来指定用于打开文件的模式.

参数"r":在读取模式下打开,这是默认设置(read)

参数"w":写入模式,用于重写文件的内容(write)

参数"a":追加模式,用于将新内容添加到文件末尾

将"b"添加到某个模式中文件将以二进制模式打开它,该模式用于非文本文件(如图像和声音视频文件)

open("filename.txt","w") #写模式

open("filename.txt","r") #读模式

open("filename.txt","wb") #二进制写入模式

文件被打开和使用后要关闭它.通过文件对象的close方法进行关闭.

file=open("filename.txt","w")

file.close() #关闭文件

七 读文件

可以使用read方法读取以文本模式打开的文件的内容.

file=open("filename.txt")

cont=file.read()

print(cont)

file.close()

这将打印文件"filename.txt"的所有内容

如果只要读取文件的一部分内容,你可以提供一个数字作为read方法的参数.决定要读取的字节数.

可以多次调用来读取同一个文件对象,逐字节读取更多的内容.如果没有参数,read返回文件的其余部分内容.

file=open("filename.txt","r")

print(file.read(16))

print(file.read(4))

print(file.read(4))

print(file.read())

file.close()

★在读取完文件中的所有内容之后,如果试图从该文件进一步读取,将会返回一个空字符串,因为你正试图从文件末尾进行读取.

file=open("filename.txt")

file.read()

print("Re-reading")

print("file.read()")

print("Finished")

file.close()

结果:

Re-reading

Finished

★要检索文件中的每一行,可以使用readlines方法返回一个列表.其中每个元素是文件中的一行.

例如:

file=open("filename.txt")

print(file.readlines())

file.close()

结果:

['Line 1 text \n','Line 2 text \n','Line 3 text ']

你可以使用for循环遍历文件中的行:

file=open("filename.txt","r")

for line in file:

print(line)

file.close()

结果:

Line 1 text

Line 2 text

Line 3 text

在输出中,行由空行分隔,因为print函数在其输出结束时自动添加新行.

八 写文件

write方法,将字符串写入文件.

file=open("filename.txt","w")

file.write("This has been written to a file")

file.close()

file=open("filename.txt","r")

print(file.read())

file.close()

结果:

This has been written to a file

"w"模式,如果文件不存在,将创建一个文件.

当以写入模式打开文件时,文件的原有内容将被删除.

file=open("filename.txt","r")

print("Reading initial contents")

print(file.read())

print("Finished")

file.close()

file=open("filename.txt","w")

file.write("Some new text")

file.close()

file=open("filename.txt","r")

print("Reading new contents")

print(file.read())

print("Finished")

file.close()

结果:

Reading initial contents

some initial text

Finished

Reading new contents

Some new text

Finished

文件的内容被覆盖.

★如果写入成功的话,write方法返回文件的字节数.

msg="Hello world!"

file=open("newfile.txt","w")

amount_written=file.write(msg)

print(amount_written)

file.close()

结果:12

九 文件操作

要确保文件在使用后始终关闭.一种方法是使用try和finally:即使发生错误,这也可以确保文件始终关闭.

try:

f=open("filename.txt")

print(f.read())

finally:

f.close()

还有另外一种方法:

with open("filename.txt") as f:

print(f.read())

这将创建一个零时变量f,该变量只能在with语句的缩进块中访问.

在with语句结束时,即使文件内部发生异常,文件也会自动关闭.

标签: #open函数打开文件失败原因是