一、异常
概念
在程序的开发中,如果对某些代码的执行不确定(程序的语法没有问题)
可以用try来捕获异常
格式
try:
尝试执行的代码
except:
出现错误的处理
try:
num = int(raw_input('请输入整数:'))
except:
print '输入正确的整数!'
练习
"""
1.提示用户输入一个整数
2.使用8除以用户输入的整数并且输出
"""
#当python解释器抛出异常时,最后一行的错误信息显示就是错误类型
try:
num = int(raw_input('请输入整数:'))
result = 8 / num
print result
except ZeroDivisionError:
print '零不能做除数'
except ValueError:
print '你需要输入一个整数'
#错误预想
#1输入的不是整数
#2零不能做除数
如果出现未知的错误可以这样写
try:
num = int(raw_input('请输入整数:'))
result = 8 / num
print result
except ZeroDivisionError:
print '零不能做除数'
#捕获未知异常
#result:一个变量名称,随意起
except Exception as result:
print '未知错误%s' % result
在开发的时候,要判断所有可能出现的错误,是有一定难度的
如果希望那个程序无论出现任何的错误,欧不会因为python解释器抛出异常而中止
可以再增加一个except Exception
完整的try结构
try:
#尝试执行的代码
except: 错误类型1
except: 错误类型2
。。。
except Exception as result:
else:
#没有异常才会执行的代码
finally:
#无论程序正确或者错误,都会执行的代码
try:
num = int(raw_input('请输入整数:'))
result = 8 / num
print result
except ZeroDivisionError:
print '零不能做除数'
except Exception as result:
print '未知错误%s' % result
else:
print '输入正确'
finally:
print '*************'
输出结果
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/3.py
请输入整数:……
未知错误invalid literal for int() with base 10: '\xe2\x80\xa6\xe2\x80\xa6'
********************************************************************************************************************************************************************************************************************************************************************
Process finished with exit code 0
异常的传递
"""
异常的传递
当函数|方法执行出现异常,会将异常传递给函数|方法调用的一方
如果传递到主程序,依旧没有异常处理,程序才会终止,
可以在主程序中增加异常捕获,
而在主函数中调用的其他函数,只要出现异常
都会传递到主函数的异常
捕获中,这就不需要在代码中,增加大量的异常捕获,能够保证代码的整洁
"""
def demo1():
return int(raw_input('输入一个整数:'))
def demo2():
return demo1()
#利用异常的传递性,在主程序中捕获异常
try:
print demo2()
except Exception as result:
print '未知错误 %s' % result
#判断用户输入的密码
1. <8位 错误
2. >= 8位 返回输入的密码
def input_passwd():
#提示用户输入密码
pwd = raw_input('输入密码')
#判断密码的长度>= 8 ,就返回用户的输入密码
if len(pwd) >= 8:
return pwd
#<8,主动抛出异常
#print '主动抛出异常'
#1.创建异常对象(可以添加错误信息)
ex = Exception('密码长度不够!')
raise ex
#注意:之长处异常而不捕获异常,代码会出错
try:
print input_passwd()
except Exception as result:
print result
#县创建异常对象,再抛出异常,再在主函数中捕获异常
异常中自己写错误信息
断言
断言
"""
def func(num,div):
assert (div != 0 ), "div 不能为0"
return num / div
print func(10,0)
这样的结果显示:
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/7.py
Traceback (most recent call last):
File "/home/kiosk/PycharmProjects/python/day7/7.py", line 12, in <module>
print func(10,0)
File "/home/kiosk/PycharmProjects/python/day7/7.py", line 10, in func
assert (div != 0 ), "div 不能为0"
AssertionError: div 不能为0
Process finished with exit code 1
二、模块
#使用as指定模块的别名(使用大驼峰命名法)
import mokuai1 as Yimodule
import mokuai2 as Ermodule
python的解释器在导入模块的时候,会:
1.搜索当前目录指定的模块文件,如果有就直接导入
2如果没有,再搜索系统目录
注意:在开发时,给文件起名,不要和系统的模块文件重名
"""
import random
rand = random.randint(10,20)
print rand
如果一样就会出现这样的报错
usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/模块/模块5.py
Traceback (most recent call last):
File "/home/kiosk/PycharmProjects/python/day7/模块/模块5.py", line 14, in <module>
rand = random.randint(10,20)
AttributeError: 'module' object has no attribute 'randint'
Process finished with exit code 1
__name__的属性
"""
__name__的属性
测试模块的代码只在测试情况下被运行,而在被导入时不会
__name__是python的一个内置属性,记录着一个字符串
如果是被其他文件导入时,__name__就是__main__
"""
#全局变量,函数,类,直接执行的代码不是向外界提供的工具
def say():
print 'hello'
print 'flash'
#如果直接执行在模块中输出,得到的是__main__
print __name__
#文件被导入的时候,能够直接被执行的代码 不需要被执行
if __name__ == '__main__':
print __name__
print '我 开发的程序'
say()
其运行的结果为
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/模块/mk.py
flash
__main__
__main__
我 开发的程序
hello
Process finished with exit code 0
在python中常看到的代码格式
python中常看到的代码格式
# 导入模块
# 定义全部变量
# 定义类
# 在代码的下方
def main():
pass
if __name__ == '__main__'
main()
# 在导入的.py文件中,输出的时 文件名
三、文件
1 读取
"""
操作文件的函数/方法
在python中要操作文件需要记住的1个函数和3个方法
#python中一切皆对象
open :打开文件,并且返回文件操作对象
read :将文件内容读取到内存
write :将指定内容写入文件
close :关闭文件
open函数负责打开文件,宾且返回文件对象
read/write/close三个方法都需要通过文件对象来调用
read方法--读取文件
open函数的第一个参数是要打开的文件名(文件名区分大小写)
如果文件存在,返回文件操作对象
如果文件不存在,会抛出异常
read方法可以一次性读入并返回文件的所有内容
close方法负责关闭文件
"""
# 如果忘记关闭文件,会造成系统消耗,而且会影响到后续对文件的访问
# 1.打开文件
file = open('REDME')
# 2.操作文件 读/写
# read方法:读取文件内容(一次性返回文件的所有内容)
text = file.read()
print text
# 3.关闭文件
# close方法:负责关闭文件
file.close()
# 在开发中,通常会先编写打开和关闭的代码
新建立一个文本
一定注意不是pythonfile文件
可得结果 为文本文档的内容
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/文件/1.py
xixixixixix
Process finished with exit code 0
文件指针
# _*_ coding:utf-8 _*_
"""
file:2.py
date:2018-07-24 2:33 PM
author: FATRAT
desc:
文件指针:
文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件之真会只想文件的开始位置
当执行了read方法后,文件指针会移动到读取内容的末尾
"""
file = open('read')
text = file.read()
print text
print '#' * 50
#第一次读取的时候,文件指针移动到了文件的末尾
#再次调用不会读取到任何内容
text = file.read()
file.close()
结果为
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/文件/2.py
xixixixixix
lalala
gagaga
dafasfasaad
sdfwefasdfas
d
##################################################
Process finished with exit code 0
练习1
# _*_ coding:utf-8 _*_
"""
file:3.py
date:2018-07-24 2:36 PM
author: FATRAT
desc:
"""
file = open('read') #可以读取目录中的文件例如:/home/file
text = file.read()
print text
#打印输入内容的长度
print type(text)
print len(text)
print '#' * 50
file.close()
结果为
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/文件/3.py
xixixixixix
lalala
gagaga
dafasfasaad
sdfwefasdfas
d
<type 'str'>
52
##################################################
Process finished with exit code 0
读取系统中的文件
# _*_ coding:utf-8 _*_
"""
file:2.py
date:2018-07-24 2:33 PM
author: FATRAT
des:
文件指针:
文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件之真会只想文件的开始位置
当执行了read方法后,文件指针会移动到读取内容的末尾
"""
file = open('/mnt/python/day07/文件/REDME')
text = file.read()
print text
print '#' * 50
#第一次读取的时候,文件指针移动到了文件的末尾
#再次调用不会读取到任何内容
text = file.read()
file.close()
结果为
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/文件/2.py
hello python
hello world
hello hello
##################################################
Process finished with exit code 0
2 写
# _*_ coding:utf-8 _*_
"""
file:4.py
date:2018-07-24 2:57 PM
author: FATRAT
desc:
以写的方式打开文件,如果文件存在会覆盖原内容
如果文件不存在会创建一个新的文件
"""
#1.打开文件
file = open('read','w')
#2.写入文件
file.write('westos ')
#3.关闭文件
file.close()
2、
# _*_ coding:utf-8 _*_
"""
file:5.py
date:2018-07-24 3:00 PM
author: FATRAT
desc:
以写的方式打开文件,不会覆盖源文件 会在源文件末尾添加
"""
#1.打开文件
file = open('read','a')
#2.写入文件
file.write('bilibili comp ')
#3.关闭文件
file.close()
file = open('read')
text = file.read()
print text
file.close()
通过关闭后再此读取可以看到实验的结果
/usr/bin/python2.7 /home/kiosk/PycharmProjects/python/day7/文件/5.py
westos bilibili comp bilibili comp bilibili comp bilibili comp
Process finished with exit code 0
添加成功哦
3、读取大文件
# _*_ coding:utf-8 _*_
"""
file:6.py
date:2018-07-24 3:09 PM
author: FATRAT
desc:
如何读取大文件
read方法默认会把文件的所有内容一次性读到内存中
如果文件太大,对内存的占用率鞭打
而使用readline方法:
一次只读取一行内容
方法执行后,会把文件指针移动到下一行,尊卑再次读取
"""
file = open('read')
#死循环是为了在读取文件时不知道文件有多少行
while True:
text = file.readline()
#如果文件指针到文件的最后一行,就没有内容可读了
if not text:
break
#每读取一行,末尾都有一个\n
print text
file.close()
文件的复制
# _*_ coding:utf-8 _*_
"""
file:7.py
date:2018-07-24 3:25 PM
author: FATRAT
desc:
文件的复制
"""
#打开文件
file_read = open('read')
#源文件以只读的方式打开
#目标文件以写的方式打开
file_write = open('cp_read','w')
#从源文件中读取内容
text =file_read.read()
#将读取到的内容写道目标文件中
file_write.write(text)
#关闭文件
file_read.close()
file_write.close()
大文件的复制
# _*_ coding:utf-8 _*_
"""
file:8.py
date:2018-07-24 3:35 PM
author: FATRAT
desc:
大文件的逐行复制
"""
file_read = open('read')
file_write = open('cp_read','w')
while True:
text = file_read.readline()
if not text:
break
file_write.write(text)
file_read.close()
file_write.close()
第二种查看文件的方法
with
关键字with在不需要访问文件后将其关闭,在这个程序中,
我们调用了open(),但没有调用close();你也可以调用open()和close来打开
和关闭文件,但这样做时,如果程序存在bug,导致close()语句没有执行,
文件将不会关闭,未妥善地关闭文件可能会导致数据丢失或受损,
如果在程序中过早地调用close(),
你会发现需要使用文件时它已经关闭(无法访问),
这会导致更多地错误,你并非在任何情况下都能轻松地确定关闭文件地恰当时机
通过使用with结构,可让python去确定,
你只管打开文件,并在需要时使用它,
python会在合适的时候自动将其关闭
# _*_ coding:utf-8 _*_
"""
file:1.py
date:2018-07-24 4:02 PM
author: FATRAT
desc:
"""
with open('po') as file_object:
contents = file_object.read()
print contents
2.
# _*_ coding:utf-8 _*_
"""
file:2.py
date:2018-07-24 4:16 PM
author: FATRAT
desc:
"""
filename = 'po'
with open(filename) as file_object:
for line in file_object:
print line
3.添加
# _*_ coding:utf-8 _*_
"""
file:3.py
date:2018-07-24 4:17 PM
author: FATRAT
desc:
"""
# _*_ coding:utf-8 _*_
filename = 'po'
with open(filename,'w') as file_object:
file_object.write('i gogogog\n')
file_object.write('xixixixi')
三、数据储存
# _*_ coding:utf-8 _*_
"""
file:1.py
date:2018-07-24 4:33 PM
author: FATRAT
desc:
很多程序都要求用户输入某种信息,
程序都把用户提供的信息存储在列表和字典等数据结构中,
用户关闭程序时,你几乎总是要保存他们的信息:
一种简单的方式是使用模块json来存储数据
(在python中使用json的时候,主要也就是使用json模块,json是以一种良好的格式来进行数据的交互)
模块json让你能够将简单的Python数据结构转存到文件中,
并在程序再次运行时加载该文件中的数据,
你还可以使用json在Python程序之间分享数据,
更重要的是,json数据格式并非Python专用的,
这让你能够将以json格式存储的数据与使用其他编程语言的人分享
注意:json(javascriptObject notation)格式最初是为javascript开发的,但随后成了一种常见格式,
被包括python在内的众多语言采用
"""
import json
number = [1,2,3,4]
with open('numbers.json','w') as f_obj:
#我们使用函数json.dump()将数字列表储存到列表中
json.dump(number,f_obj)
# _*_ coding:utf-8 _*_
"""
file:2.py
date:2018-07-24 4:34 PM
author: FATRAT
desc:
"""
import json
filename = 'numbers.json'
with open(filename) as f_obj:
#函数使用的load加载存储再numbers.json中的信息
#并将其存储到变量numbers
numbers = json.load(f_obj)
print numbers
json的列表使用
存储名字
# _*_ coding:utf-8 _*_
"""
file:3.py
date:2018-07-24 4:46 PM
author: FATRAT
desc:
"""
import json
username = raw_input('what is your name ?')
filename = 'username.json'
with open(filename,'a') as f_obj:
json.dump(username,f_obj)
print 'We will remeber you when you come back, %s' % username
读取名字
# _*_ coding:utf-8 _*_
"""
file:4.py
date:2018-07-24 4:48 PM
author: FATRAT
desc:读取名字
"""
import json
filename = "username.json"
with open(filename) as f_obj:
username = json.load(f_obj)
print "Welcome back, %s" % username
练习题
# _*_ coding:utf-8 _*_
"""
file: 05.py
date: 2018-07-24 4:53 PM
author: westos-dd
desc:
题目
如果以前存储了用户,就显示
否则,就提示用户输入用户名并存储它
"""
import json
filename = "username.json"
try:
with open(filename) as f_obj:
username = json.load(f_obj)
except ValueError:
username = raw_input("What is you name? ")
with open(filename,"w") as f_obj:
json.dump(username,f_obj)
print "We'll remember you when you come back %s" % username
#依赖于try代码块成功执行的代码都应放到else代码块中:
else:
print "Welcome back %s " % username