一、异常
1、概念
在程序的开发中,如果对某些代码的执行不确定(程序的语法完全正确)
可以增加try来捕获异常
try:
尝试执行的代码
except:
出现的错误的处理
2、简单的异常
try:
num = int(raw_input('请输入一个整数: '))
except:
print '请输入正确的整数!!!'
#无论是否输入错误额,程序都不会报错,都会正常执行
print '*' * 50
3、异常类型
三种Exceptions的类型:ZeroDivisionError,NameError,TypeError,它们都是内置异常的名称。标准异常的名字就是内建的标识符(但并不是关键字)
当python解释器抛出异常时,
最后一行错误信息的第一个单词,
就是错误类型
4、未知异常
捕获未知错误:
在开发的时候,要判断所有可能出现的错误,是有一定难度的
如果希望程序无论出现任何错误,都不会因python解释器抛出异常
而终止,可以再增加一个excpet
5、标准的异常格式
try:
#尝试执行的代码
pass
except 错误类型 1 :
pass
except 错误类型 2 :
pass
except Exception as result:
else:
#没有异常才会执行的代码
pass
finally:
#无论是否有异常,都会执行的代码
pass
6、异常的传递
异常的传递--当函数/方法执行异常,会将异常传递给函数/方法调用的一方
如果传递到主程序,依旧没有异常处理,程序才会终止,可以在主程序中增加
异常捕获,而在主程序中调用其他函数,只要出现异常,都会传递到主函数的
异常捕获中,这就不需要在代码中,增加大量的异常捕获,能够保证到代码的
整洁。
7、案例
判断密码的长度
二、模块
title = '模块1'
# 函数
def say_hello():
print '%s 讲的是有中国历史' % title
# 类
class China_history(object):
pass
title = '模块2'
# 函数
def say_hello():
print '%s 讲的是中国未来' % title
#类
class China_future:
pass
将test1和test2结合起来,使用as指定模块的别名(大驼峰命名法)
1、python的解释器再导入模块的时候,会:
1).搜索当前目录指定的模块文件,如果有就直接导入
2).如果没有,再搜索系统目录
注意:在开发时,给文件起名,不要和系统模块文件重名
2、断言
断言,调试时可以检查传入的参数是否合法。
我们可以使用C标准库assert的实现方法
3、name属性
name属性可以做到,测试模块的代码只是在测试情况下被运行,
而在被导入时不会执行
name时python的一个内置属性,记录着一个字符串
如果是被其他文件导入时,name就是模块名
如果是当前执行的程序,name就是 main
# 全局变量,函数,类 直接执行的代码不是向外界提供的工具
def say_hello():
print 'hello hello'
# print 'have a nice day !!'
# 如果直接在模块中输入,得到的是__main__
if __name__ == '__main__':
print __name__
#print __name__
print 'lily 开发的程序'
say_hello()
当注释掉 i f 语句
4、标准格式
在很多python文件中会得到以下格式的代码
# 导入模块
# 定义全部变量
# 定义类
# 定义函数
# 在代码的下方
def main():
pass
if __name__ == '__main__'
main()
三、文件
1、概念
操作文件的函数/方法
在python中要操作文件需要记住的1个函数和3个方法
#python中一切皆对象
open :打开文件,并且返回文件操作对象
read :将文件内容读取到内存
write :将指定内容写入文件
close :关闭文件
open函数负责打开文件,并且返回文件对象
read/write/close 三个方法都需要文件对象来调用
read 方法--读取文件
open函数的第一个参数是要打开的文件名(文件名区分大小写)
如果文件存在,返回文件操作对象
如果文件不存在,会抛出异常
read方法可以一次性读如并返回文件的所有内容
close方法负责关闭文件
2、打开一个绝对路径的文件
3、文件指针
文件指针:
文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件指针会指向文件位置
当执行了read方法后,文件指针会移动到读取文件末尾
4、文件打开方式
打开文件的方式:
name = open('文件名','访问方式')
以追加方式打开文件
如果该文件存在,文件指针会放在文件的末尾
如果文件不存在,创建文件并写入
5、按行读取文件
按行读取文件
read方法默认会把文件的所有内容一次性读到内存
如果文件太大,对内存的占用会非常严重哦
readline方法
可以一次性读取一行内容
方法执行后,会把文件指针移动到下一行,准备再次读取
6、导入指定文件
# 1.打开文件
# 源文件以只读的方式打开
file_read = open('README')
# 目标文件以写的方式打开
file_write = open('README_COOPY','w')
# 2.从源文件中读取内容
text = file_read.read()
# 将读取到的内容写到目标文件中
file_write.write(text)
# 3.关闭文件
file_read.close()
file_write.close()
7、练习
# 1.打开文件
# 源文件
file_read = open('README')
# 目标文件
file_write = open('README_COPY1','w')
# 2.读取文件
while True:
text = file_read.readline()
if not text:
break
file_write.write(text)
print text
file_write.write(text)
# 3.关闭文件
file_read.close()
file_write.close()
五、 with 关键字
1、概念
关键字with在不需要访问文件后将其关闭,在这个程序中,
我们调用了open(),但没有调用close();你也可以调用
open()和close来打开和关闭文件,但这样做时,如果程序
存在bug,导致close()语句没有执行,文将将不会关闭,
为妥善地关闭文件可能会导致数据丢失或受损,如果在程序中
过早地调用close(),你会发现需要使用文件时它已经关闭
(无法访问),这会导致更多地错误,你并非在任何情况下都
能轻松地确定关闭文件地恰当时机通过使用with结构,可让
python去确定,你只管打开文件,并在需要时使用它,
python会在合适的时候自动将其关闭
2、大文件打开方式
filename = 'pi_digits'
with open(filename) as file_object:
for line in file_object:
print line
竖行表示
filename = 'pi_digits'
with open(filename) as file_object:
lines = file_object.readline()
for line in lines:
print line
3、利用 with 写文件
filename = 'linux'
with open(filename,'a') as file_object:
file_object.write('I love python.\n') ## \n 换行
file_object.write('I love linux')
六、文件储存 —— json
1、概念
很多程序都要求用户输入某种信息,
程序都把用户提供的信息储存在列表的字典等数据结构中,
用户关闭程序时,你几乎总是要保存他们的信息:
一种简单的方式是使用模块json来存储数据
(在python中使用json的时候,主要也就是使用json模块
json是以一种良好的格式来进行数据的交互)
模块json让你能够将简单的python程序之间分享数据,
更重要的是,json数据格式并非python专用的,
这让你能够将以json格式存储的数据与使用其他编程语言的人分享
注意:json(javascriptObject notation)格式最初是为
javascript开发的,但随后成了一种常见的格式,被包括
python在内的众多语言采用
2、查看
import json
filename = 'numbers.json'
with open(filename) as f_object:
numbers = json.load(f_object)
print numbers
3、将输入的内容保存入文档
import json
username = raw_input('what is your name ?')
filename = 'username.json'
with open(filename,'a') as f_object:
json.dump(username,f_object)
print 'We will remmeber you when you come back,%s' % username
4、调用文档的内容来实现命令输出
import json
filename = 'username.json'
with open(filename) as f_object:
username = json.load(f_object)
print 'Welcome back, %s' % username
5、如果以前存储了用户,就显示。否则,就提示用户输入用户名并存储它
import json
filename = 'username.json'
try:
with open(filename) as f_object:
username = json.load(f_object)
except ValueError:
username = raw_input('What your name ?')
with open(filename,'w') as f_object:
json.dump(username,f_object)
print "We'll remember you when you come back %s" % username
# 依赖于try代码块成功执行的代码都应放到else代码块中:
else:
print "Welcome back %s" % username
修改或添加 username.json 中的名字