Chinaunix首页 | 论坛 | 博客

分类: Python/Ruby

2014-02-21 21:39:07

通过这个练习,来看一些细节问题。
#! /usr/bin/env python3                                                                       
                                                                                                                        #程序中空格的使用
# Copy one file's atime and mtime to another                                                   #介绍脚本的作用
                                                                                                        
import sys
import os
from stat import ST_ATIME, ST_MTIME # Really constants 7 and 8

def main():
    if len(sys.argv) != 3:
        sys.stderr.write('usage: copytime source destination\n')                            #向标准错误输出写数据,那么控制向标准输出的函数有哪些?
        sys.exit(2)                                                                                                #异常退出使用sys.exit函数
    file1, file2 = sys.argv[1], sys.argv[2]
    try:
        stat1 = os.stat(file1)                                                                                                
    except os.error:                                                                                            #注意是:os.error,Python的异常处理机制是什么?
        sys.stderr.write(file1 + ': cannot stat\n')
        sys.exit(1)
    try:
        os.utime(file2, (stat1[ST_ATIME], stat1[ST_MTIME]))
    except os.error:
        sys.stderr.write(file2 + ': cannot change time\n')
        sys.exit(2)

if __name__ == '__main__':
    main()

注意:利用os.stat函数获取文件的状态,在stat模块中定义了判断函数和一些常量,对os.stat()的输出进行更有意义的解析;最后,还是利用os模块的函数,对文件进行修改.

控制向标准输出的函数有哪些?
>>> import sys
>>> sys.stdout
', mode 'w' at 0xb72b3078>
>>> sys.stdin
', mode 'r' at 0xb72b3020>
>>>help(sys.stdout)
本以为sys.stdout是一个文件呢,原来又忘了一切皆对象的原则。所以file对象的fulsh操作就找到了。
《python参考手册》有关于输入输出的介绍,这两部分内容应该够了。


Python的异常处理机制:
       try/except 下,except可不加任何参数,我想这样可以捕捉到所有的异常,但是无法进一步分析异常产生的原因。
        在调用模块的函数时,例如os,thread,socket等,产生的异常可以xxx.error做进一步的分析,一切皆对象,调用个函数估计就行。
        试了一下,没找到那个函数,以后留意一下。
       那么这些对象的继承关系是什么呢?这是后面要学习的内容了。
        
        至于内置类型的异常,通常我们执行它出错时,都会提示出什么错,例如int('b'), 会提示ValueError:xxx,
        那么我们在下次修改的时候,增加try/except ValueError:即可捕捉到该异常
        

阅读(445) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~