python 在线

981Python 异常处理

异常处理代码执行说明:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#This is note foe exception

try:
  code    #需要判断是否会抛出异常的代码,如果没有异常处理,python会直接停止执行程序

except:  #这里会捕捉到上面代码中的异常,并根据异常抛出异常处理信息
#except ExceptionName,args:    #同时也可以接受异常名称和参数,针对不同形式的异常做处理

  code  #这里执行异常处理的相关代码,打印输出等


else:  #如果没有异常则执行else

  code  #try部分被正常执行后执行的代码

finally:
  code  #退出try语句块总会执行的程序



#函数中做异常检测
def try_exception(num):
  try:
    return int(num)
  except ValueError,arg:
    print arg,"is not a number"
  else:
    print "this is a number inputs"


try_exception('xxx')

#输出异常值
Invalide literal for int() with base 10: 'xxx' is not a number

980Python 异常处理

0 作为除数:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    1 / 0
except Exception as e:
    '''异常的父类,可以捕获所有的异常'''
    print "0不能被除"
else:
    '''保护不抛出异常的代码'''
    print "没有异常"
finally:
    print "最后总是要执行我"

979Python File 方法

Python 在 Windows 环境下(在 linux 环境下不存在此问题),在 write 后,直接 read, 会出现乱码问题。如下:

fo = open("foo.txt", "w+")
fo.write('www.facesoho.com')
print fo.read()

运行结果会出现一堆乱码,我们会初步判断为编码问题, 但其实并不是编码问题, 而是 EOF 的问题,也就是指针的位置问题,当我们以 w+ 开启文件读写模式的时候,由于是 w,所以文件会被清空,也就是文件为空,初始状态指针为 0 ,也就是初始即为 EOF 位置。

当我们写入字符串 www.runboon.com 后,指针的位置为 15,文件在缓存中的的内容为 www.runboon.com[EOF],指针的最后位置为 15, 所以直接 open 的时候会默认跳过 15,直到读取到了前一个 EOF 为止,所以你会得到缓存中的一堆乱码。

Python 是使用 fopen/fread/fwrite 这系列函数来读写文件的,经查阅 MSDN:http://msdn.microsoft.com/en-us/library/yeby3zcb.aspx 经查阅, 里面有一句对写入后读取操作的一句表述:When you switch from writing to reading, you must use an intervening call to either fflush or to a file positioning function. 这句话给出了解决方法, 也就是write后执行read方法我们需要先执行flush()方法或指定一个文件读取为止。

改进以后的代码如下:

fo = open("foo.txt", "w+")
fo.write('www.facesoho.com')
fo.flush()
fo.seek(0)#指定指针为止为文件开头
print fo.read()

读取乱码问题完美解决。

978Python File 方法

为了保证无论是否出错都能正确地关闭文件,我们可以使用 try ... finally 来实现:

try:
    f = open('/path/to/file', 'r')
    print f.read()
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python 引入了 with 语句来自动帮我们调用 close() 方法:

with open('/path/to/file', 'r') as f:
    print f.read()

这和前面的 try ... finally 是一样的,但是代码更佳简洁,并且不必调用 f.close() 方法。

977Python File 方法

在 write 内容后,直接 read 文件输出会为空,是因为指针已经在内容末尾。

两种解决方式: 其一,先 close 文件,open 后再读取,其二,可以设置指针回到文件最初后再 read

# -*- coding: UTF-8 -*-

import os;

document = open("testfile.txt", "w+");
print "文件名: ", document.name;
document.write("这是我创建的第一个测试文件!\nwelcome!");
print document.tell();
#输出当前指针位置
document.seek(os.SEEK_SET);
#设置指针回到文件最初
context = document.read();
print context;
document.close();