Python下的异常处理、数据存储及其文件的使用

一、异常
1.在程序开发中,如果对某些代码的执行不确定(程序的语法完全正确)
可以增加try来捕获异常

格式如下
try:
     尝试执行的代码
except:
      出现错误的处理
示例:
try:
    num = int(raw_input('请输入整数:'))
except:
    # 无论是否出现错误,程序正常运行
    print '请输入正常的整数'
print '*' * 20

这里写图片描述

2.当python解释器抛出异常,最后一行错误信息的第一个单词为错误类型
1.提示用户输入一个整数
2.使用10除以用户输入的整数

try:
    num = int(raw_input('请输入整数:'))
    result = 10 / num
    print result
except ZeroDivisionError:
    print '除0错误,0不能作为除数'
except ValueError:
    print '请输入正确的整数'

这里写图片描述

3.捕获未知错误,要判断所有可能出现的错误,有一定难度,如果希望程序无论出现任何错误
都不会因为python解释器抛出异常而终止
可以在增加except Exception as 变量

try:
    num = int(raw_input('请输入整数:'))
    a = 10/num
    print a
# except ZeroDivisionError:
#    print '0不能作为除数'
except ValueError:
    print '请输入正确的整数'
except Exception as a:
    print '未知错误 %s' %a

这里写图片描述

4.代码的异常处理及其正确输出的格式

try:
    # 需要执行的代码
except 错误类型1:
    pass
except 错误类型2:
    pass
except Exception as a:
    #未知异常
else:
    正常执行时候才会输出的结果
finally:
    无论什么时候都会输出的结果

示例:

try:
    num = int(raw_input('请输入整数:'))
    a = 10/num
    print a
# except ZeroDivisionError:
#    print '0不能作为除数'
# 捕获未知异常
except ValueError:
    print '请输入正确的整数'
except Exception as a:
    print '未知错误 %s' %a
    # 没有异常会输出的代码
else:
    print '执行成功'
    # 无论什么时候都会输出的代码
finally:
    print '无论是否有异常输出结果'

这里写图片描述

5.异常的传递–当主函数/方法执行出现异常,会将异常传递给函数/方法调用的一方,如果
传递给主程序,依然没有异常处理,程序才会终止,可以在主程序中增加异常捕获,而
在主程序中调用其他函数,只要出现异常,都会传递的主函数的异常捕获中,就不需要在
函数代码中增加大量异常捕获,保证代码的整洁性

示例1:

def demo1():
    return int(raw_input('请输入整数:'))
def demo2():
    return demo1()

# 利用异常的传递性,在主程序里捕获异常
try:
    print demo2()
except Exception as result:
    print "未知异常%s " % result

示例2:输入密码,如果密码小于8位则提示异常,否则就正常输出密码

try:
    print demo2()
except Exception as result:
    print "未知异常%s " % result

def demo1():
    num = raw_input('请输入密码:')
    # 密码大于8位,则输出密码
    if len(num)>= 8:
        return num
    # 密码小于8位,主动抛出异常
    # 创建异常对象(可以添加错误信息)
    ex = Exception('输入密码长度不够')
    raise ex
# 注意:只抛出异常而不捕获异常,代码会出错
try:
    print demo1()
except Exception as result:
    print result
    # 先创建异常对象,再抛出异常,再在主函数中捕获异常

这里写图片描述
二、文件
1.操作文件的函数/方法
在python中要操作文件需要记住的1个函数和3个方法
# 在python中,一切皆对象
open :打开文件,并且返回文件操作对象
read :将文件内容读取到内存
write: 将指定内容写入文件
close : 关闭文件(如果忘记关闭文件,不仅会占用内存,
而且会影响对文件的后续使用)
open函数负责打开文件,并且返回文件对象
read/write/close三个方法都要通过文件对象来调用

read方法–读取文件
open函数的第一个参数是要打开的文件名(文件名区分大小写)
如果文件存在,返回文件操作对象
如果文件不存在,会抛出异常
read方法可以一次性读入并返回文件的所有内容
close方法负责关闭文件
示例1:

# 1.打开文件
file = open('README')
# 2.操作文件
# read方法:读取文件内容,(一次性返回文件的所有内容)
text = file.read()
print text
# 3. 关闭文件
# close:负责关闭文件
file.close()
# 在开发中,首先要编写打开和关闭的代码

2.文件指针:
文件指针标记从哪个位置开始读取文件
第一次打开文件时,通常文件会指向文件的开始位置
当执行read方法后,文件指针会移动到读取内容的末尾

file = open('README')
text = file.read()
print len(text)
print type(text)
print text
print '*' * 50

text = file.read()
print len(text)
print type(text)
print text

file.close()

这里写图片描述
运行结果:
这里写图片描述
3.以写的方式写入文件,则会覆盖文件之前的内容,


# 若文件不存在,则会创建新文件
file = open('README', 'w')
file.write('westos')
file.close

这里写图片描述
4. 表示添加文件内容,文件指针指向文件末尾

# 添加内容,不会覆盖原先内容
# 如果文件不存在,则会自动新建文件并写入
file = open('README', 'a')
file.write('linux')
file.close()

这里写图片描述

5.按行读取文件

read 方法默认会把文件内容一次性读入内存,如果文件太大,对内存的占用非常严重
readline:
这个方法可以一次性读取一行内容
方法执行后,会把文件指针转移到下一行,准备再次读取
"""
# 为什么要写成死循环,因为我们不知道要读取的文件有多少

示例1:

file = open('README')
while True:
    text = file.readline()
    # 如果文件内容到最后一行,就没有内容可以读取
    if not text:
        break
    print text
file.close()

这里写图片描述
示例2:

file = open('README')
while True:
    text = file.readline()
    print len(text)
    # 空格也表示一个字符,当字符长度为0表示读完文件,文件指针到结尾

    if len(text) == 0:
        break
    print text
file.close()

这里写图片描述
6. 将源文件的内容写入到指定文件中

第一种:
将源文件以读的方式打开
file_read = open('README')
# 将目标文件以写的方式打开
file_write = open('README_COPY', 'w')
# 从源文件中读取内容
text = file_read.read()
# 将读取到的内容写道目标文件中
file_write.write(text)
# 关闭文件
file_read.close()
file_write.close()
第二种:
# 只打开一次文件,所以不会覆盖
file_read = open('README')
file_write = open('READCOPY', "w")
while True:
    text = file_read.readline()
    if not text:
        break
    file_write.write(text)
file_read.close()
file_write.close()

这里写图片描述
这里写图片描述

三、文件
1.关键字with在不需要访问文件后将其关闭,在这个程序中,
我们调用了open(),但没有调用close();你也可以调用
open()和close()来打开和关闭文件,但这样做时,如果程序存在bug,导致close()
语句没有执行
文件将不会被关闭,未妥善的关闭文进可能会导致数据丢失或者受损
如果在程序中调用close()
你会发现需要使用文件时它已经关闭,(无法访问)
这会导致更多的错误,你并非在任何情况下都能轻松的确定关闭文件的恰当时机
通过使用with结构,可以用python去确定
你只需要打开文件,在需要时使用
python会在适当时候将其关闭
示例:

with open('pi_gedit') as file_object:
    contents = file_object.read()
    print contents

这里写图片描述

2.一行行遍历文件内容

filename = 'pi_gedit'
with open(filename) as file_object:
    for line in file_object:
        print line

这里写图片描述

3.在指定文件中写入代码,多次打开会覆盖之前内容

filename = 'pi_gedit'
with open(filename,'w') as file_object:
    file_object.write('我喜欢你\n')
    file_object.write('你是垃圾')

这里写图片描述

4.添加内容

filename = 'pi_gedit'
with open(filename,'a') as file_object:
    file_object.write('我喜欢你\n')
    file_object.write('你是垃圾')

这里写图片描述
四、数据存储
1.将列表存入指定存储文件中

import json
number = [1,2,3,4]
with open('number.json', 'w') as f_obj:
    json.dump(number, f_obj)

这里写图片描述

2.将存储文件的内容导出

import json
filename = 'number.json'
with open(filename) as f_obj:
    # 我们使用函数json.load加载存储在number.json中的信息
    # 并将其存储在变量numbers中
    numbers = json.load(f_obj)
    print numbers

这里写图片描述

猜你喜欢

转载自blog.csdn.net/ningyuxuan123/article/details/81219115