设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间00 现在时间00 缓存数据 对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

查看: 1317|回复: 2

python异常和文件处理机制详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:3247
  • 最近打卡:2023-08-27 03:10:57
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
398
主题
380
精华
0
金钱
4420
积分
804
注册时间
2022-12-23
最后登录
2025-9-25

发表于 2024-3-21 13:40:20 | 显示全部楼层 |阅读模式
本文实例讲述了python异常和文件处理机制。分享给大家供大家参考,具体如下:
1 异常处理
Python的异常用
try
except
finally
来处理. 并且except后还可以跟 else .
引发异常用 raise
如果抛出的异常没有被处理. 在Python IDE中是显示一些红色的信息. 在真正的Python程序运行时. 会导致程序终止.
在以前我们已经见到过一下几种异常:
在 Dictionary 中如果使用的 key 不存在. 会引发 KeyError 异常. 如:
  1. >>> d = {"a":1, "b":"abc"}
  2. >>> d["c"]
  3. Traceback (most recent call last): File "<interactive input>", line 1, in <module>
  4. KeyError: 'c'
复制代码
搜索列表中不存在的值. 将引发 ValueError 异常. 如:
  1. >>> li = [1,2]
  2. >>> li.index(3)
  3. Traceback (most recent call last): File "<interactive input>", line 1, in <module>
  4. ValueError: list.index(x): x not in list
复制代码
对应的. 若用下标来引用列表中的元素. 若下标出界. 会产生 IndexError 异常. 如:
  1. >>> li[2]
  2. Traceback (most recent call last):
  3. File "<interactive input>", line 1, in <module>
  4. IndexError: list index out of range
复制代码
调用不存在的方法. 会引发 AttributeError 异常.
引用不存在的变量. 引发 NameError 异常.
未强制转化就混用数据类型. 引发 TypeError 异常.
文件操作错误引发的 IOError. 如:
  1. try:
  2.   fsock = open("/notthere")
  3. except IOError:
  4.   print "The file dose not exits..."
  5. else:
  6.   print "open the file."
  7. print "this line will always print"
复制代码
注意上边的代码中:
open 是一个内置函数. 用来打开文件. 并返回一个文件对象.
try except 后边可以跟 else 语句. 当没有捕捉到指定的异常时. 执行else 语句.
导入一个模块时. 若模块不存在. 会引发 ImportError 异常.
还可以定义自己的异常类. 定义时让它继承内置的 Exception 类. 然后在需要抛出异常时用 raise 抛出.
2 与文件对象共事
前面说过用 open 可以打开文件并返回文件对象. 它的函数声明如下:
  1. open(name[, mode[, buffering]])
复制代码
有3个参数(其中后两个是可选的). 分别表示 文件名. 打开方式. 缓冲区参数. 例如:
  1. >>> f = open("/music/_singles/kairo.mp3", "rb")
复制代码
第2个参数指定为"rb". 表示以2进制读打开文件.  如果这个参数缺省. 则表示以文本方式打开.
如果不能打开. 则open引发 IOError 异常.
现在可以用文件对象的 name 属性和 mode 属性来查询它们. 如:
  1. >>> f.name
  2. '/music/_singles/kairo.mp3'
  3. >>> f.mode
  4. 'rb'
复制代码
打开文件后. 就可以进行读写了. 如:
  1. >>> f.tell()
复制代码
查询当前位置.
  1. 0
  2. >>> f.seek(0, 2)
复制代码
定位文件指针. 第一个参数是偏移值. 第二个可以取0. 1. 2三个值. 分别表示开头. 当前位置. 末尾.
若定位的地址不正确(例如超过范围) 则引发IOError异常.
所以这个语句就把文件指针定位到了文件尾.
  1. >>> f.tell()
复制代码
这将打印文件的长度.
  1. >>> f.seek(-128, 2)
  2. >>> data = f.read(128)
复制代码
读取文件的最后128字节. 并将读入的的数据作为字符串返回. 读取数据时也同时后移文件指针.
其中 read 的参数表示最大读取字节数. 也可以省略这个参数. 则表示一直读到文件末尾.
若读取时出现错误(如磁盘上有坏扇区或网络已断开). 引发IOError 异常.
  1. >>> f.closed
复制代码
查看文件是否关闭.
  1. False
  2. >>> f.close()
复制代码
不再使用时应该关闭文件. 可以对一个已经关闭的文件再次关闭(不会发生异常).
  1. >>> f.closedTrue
复制代码
关闭之后如果再对 f 进行 seek() 等操作. 会引发 ValueError 异常.
写入文件的办法和读取类似. 不过它要求文件是 "写" 打开的. 如:
  1. >>> f1 = open('test.log', 'w')
复制代码
其中 'w' 表示写打开. 这样即使文件不存在. 也会创建. 如果存在. 则覆盖现有的文件.
  1. >>> f1.write('abc')
  2. >>> f1.close()
  3. >>> file('test.log').read()
复制代码
用 file()打开文件和用open()打开是一样的. 所以打印:
'abc'
3 for循环
在Python中. for用来在一个List上遍历. 如:
  1. >>> li = [1, 2, 3]
  2. >>> for i in li:
复制代码
这会在循环中让 i 依次接收 li 中的元素的值.
...  print i
...
1
2
3
这个输出和 print "\n".joni(li) 一样.
如果要象其它语言中一样. 让for做计数使用. 可以用如下的办法:
  1. >>> for i in range(len(li)) : print li[i]
  2. ...
  3. 1
  4. 2
  5. 3
复制代码
要用 for 来遍历 Dictionary . 如下:
  1. >>> d = {1:"abc", 2:"def"}
  2. >>> for k, v in d.items() : print "%d = %s" % (k, v)
  3. ...
  4. 1 = abc
  5. 2 = def
复制代码
上边的打印结果和 print "\n".join(["%d = %s" % (k, v) for k, v in d.items()]) 一样.
4 使用 sys.modules
在Python中. modules 是定义在sys模块中的一个全局的字典对象.
一旦我们import一个模块. 就可以在 sys.modules 中找到它.
每个类都拥有一个内置的"类属性" : __module__ . 其值为定义该类的模块的名字.
5 与Directory共事
在os.path 所引用的模块中有几个操作文件和目录的函数.如:
  1. >>> import os
  2. >>> os.path.join("c:\music", "mahadeva.mp3")
复制代码
这个join函数用来将一个或多个字符串构造成一个路径名.
  1. 'c:\music\mahadeva.mp3'
  2. >>> os.path.expanduser("~")
复制代码
expanduser函数用'~'作参数时. 返回当前用户根目录.
'c:\Documents and Settings\mpilgrim\My Documents'
  1. >>> (filepath, filename) = os.path.split("c:\music\a.mp3")
复制代码
split函数用来将一个路径名分成目录名和文件名. 它返回的是一个tuple. 用返回的tuple对(filepath, filename)赋值.
  1. >>> filepath
  2. 'c:\music'
  3. >>> filename
  4. 'a.mp3'
  5. >>> (a, b) = os.path.splitext("a.mp3")
复制代码
类似的. 这个splitext用来将一个全文件名分成 文件名 和 扩展名 两部分.
  1. >>> a
  2. 'a'
  3. >>> b
  4. '.mp3'
复制代码
列出目录用:
  1. >>> os.listdir("c:")
复制代码
这个函数将返回一个字符串list. 包括所有的文件和文件夹的名字.
  1. ['boot.ini', 'CONFIG.SYS', 'AUTOEXEC.BAT', 'java', 等]
复制代码
要判断一个字符串路径到底是一个文件还是一个文件夹. 用os.path模块中的 isfile() 或 isdir(). 如:
  1. >>> [f for f in os.listdir("c:") if os.path.isdir(os.path.join("c:", f))]
复制代码
这样就打印出c中所有文件夹名构成的list.
如果要在目录操作中使用通配符. 可以如下:
  1. >>> import glob
复制代码
要先导入 glob 模块
  1. >>> glob.glob('c:\music\*.mp3')
复制代码
则返回的list中包含了该目录下所有的 .mp3 后缀的文件名.
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:偶尔看看
  • 打卡总天数:14
  • 打卡月天数:2
  • 打卡总奖励:181
  • 最近打卡:2025-12-07 07:28:05
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
208
积分
30
注册时间
2023-3-5
最后登录
2025-12-7

发表于 2024-4-2 04:11:47 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-29
最后登录
2022-12-29

发表于 2025-4-17 14:34:15 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表