一、异常
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