• 媒体宣传报道重庆日报 王国平:扮靓重庆两江四岸” 让城市有机更新 2019-04-26
  • 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06
  • "新经济形势下金融创新的变革与机遇"论坛 2019-03-06
  • 频道栏目
    神奇公式秒杀全国11选5 > 程序开发 > Web开发 > Python > 正文
    Python下异常、???、文件、数据储存-json等知识讲解
    2018-07-27 15:40:12         来源:网络无法连接的博客  
    收藏   我要投稿

    /home/kiosk一.异常

    神奇公式秒杀全国11选5 www.2zfa.com 1.异常-01

    程序开发中,如果对某些代码的执行不确定(程序的语法完全正确)
    可以增加try来捕获异常
    try:
     尝试执行的代码
    expect:
     出现错误的处理

    实验:

    try:
     num=int(raw_input('请写入一个整数:'))
    except:
     print '请输入一个正确的整数'
    #无论是否输入错误额,程序都会正常执行
    print '*' * 50

    输入正确结果:

    这里写图片描述

    输入错误结果:

    这里写图片描述
    2.异常-02

    当python解释器抛出异常时,最后一行错误信息的第一个单词,就是错误类型。

    实验:

    #1.提示用户输入一个整数
    #2.使用6除以用户输入的整数并且输出
    try:
     num = int(raw_input('请输入一个整数:'))
     result = 6 / num
     print result
    except ZeroDivisionError:
     print '除0错误 0不能做除数'
    except ValueError:
     print '请输入正确的整数'
    
    #1.输入的不是数字
    #2.0不能做除数

    输入错误的结果:
    这里写图片描述
    这里写图片描述
    输入正确的结果:
    这里写图片描述
    3.异常-03

    捕获未知错误:
    在开发的时候,要判断所有可能出现的错误,是有一定难度的
    如果希望程序无论出现任何错误,都不会因python解释器抛出异常而终止
    可以再增加一个except

    实验:

    try:
     num = int(raw_input('请输入一个整数:'))
     result = 6 / num
     print result
    
    #捕获未知异常
    #result:一个变量名,可以随便起名
    except Exception as result:
     print '未知错误额 %s' % result

    输入错误的结果:
    这里写图片描述
    这里写图片描述
    输入正确的结果:
    这里写图片描述
    4.异常-04

    格式:
    try:
     #尝试执行的代码
     pass
    except 错误类型1:
     pass
    except 错误类型2:
     pass
    expect Exception as result
    
    else:
     #没有异常才会执行的代码
     pass
    finally:
     #无论是否有异常,都会执行的代码
     pass

    实验:

    try:
     num = int(raw_input('请输入一个整数:'))
     result = 6 / num
     print result
    
    #捕获未知异常
    #result:一个变量名,可以随便起名
    except Exception as result:
     print '未知错误额 %s' % result
    #只有在没有异常的时候,才会执行的代码
    else:
     print '尝试成功!'
    #无论是否有异常,都会执行的代码
    finally:
     print '================'

    输入错误的结果:
    这里写图片描述
    这里写图片描述
    输入正确的结果:
    这里写图片描述
    5.异常-05

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

    实验:

    def demo1():
     return int(raw_input('请输入整数:'))
    
    def demo2():
     return demo1()
    
    #利用异常的传递性,在主程序中捕获异常
    try:
     print demo2()
    except Exception as result:
     print '未知错误 %s' % result

    输入错误的结果:
    这里写图片描述
    输入正确的结果
    这里写图片描述
    6.异常-06
    实验:

    需求:
    判断用户输入密码
    1.<8 错误额
    2.>=8 返回输入的密码
    def input_passwd():
     #1.提示用户输入密码
     pwd = raw_input('请输入密码')
    
     #2.判断密码的长度 >-=8,就返回用户输入的密码
     if len(pwd) >= 8 :
      return pwd
     #3.<8,主动抛出异常
     print '主动抛出异常'
     #1.创建异常对象(可以添加错误信息)
     ex = Exception('密码长度不够')
     raise ex
    #注意:只抛出异常而不捕获异常,代码会出错
    try:
     print input_passwd()
    except Exception as result:
     print result

    输入正确的结果:
    这里写图片描述
    输入错误的结果:
    这里写图片描述

    建立test1,test2
    test1:

    title = '???'
    
    #函数
    def say_hello():
     print '我是 %s' % title
    
    #类
    class Cat(object):
     pass

    test2:

    title = '???'
    
    #函数
    def say_hello():
     print '我是 %s' % title
    
    #类
    class Dog(object):
     pass

    1.???01

    __name__属性
    __name__属性可以做到,测试??槟诘拇胫辉诓馐郧榭鱿卤辉诵?,而在被导入时不会执行
     __name__是python的一个内置属性,记录着一个字符串
     如果是被其他文件导入时,__name__就是??槊?
     如果是当前执行的程序,__name__就是_mian_

    实验:

    # 全局变量,函数,类 直接执行的代码不是向外界提供的工具
    def say_hello():
     print 'helll hello'
    
    
    # print 'have a nice day!'
    # 如果直接在??橹惺淙?,得到的时__main__
    if __name__ == '__main__':
     print __name__
    #文件被导入的时候,能够直接被执行的代码不需要被执行
     print 'gf 开发的程序'
     say_hello()

    实验结果:
    这里写图片描述
    2.???02

    #在导入??槭?,每个导入应独占一行
    import test1
    import test2
    
    test1.say_hello()
    test2.say_hello()
    
    dog = test2.Dog()
    print dog
    
    cat = test1.Cat()
    print cat

    实验结果:
    这里写图片描述
    3.???03

    #使用as指定??榈谋鹈ù笸辗迕ǎ?
    import test1 as CatModule
    import test2 as DogModule
    
    DogModule.say_hello()
    CatModule.say_hello()
    
    dog = DogModule.Dog()
    print dog
    cat = CatModule.Cat()
    print cat

    这里写图片描述
    4.???04

    from test1 import  Cat
    from test2 import say_hello
    from test1 import say_hello as test1_say_hello
    say_hello()
    test1_say_hello()
    miaomiao = Cat()

    这里写图片描述
    5.???05

    python的解释器在导入??榈氖焙?,会:
     1.搜索当前目录指定的??槲募?,如果有就直接导入
     2.如果没有,在搜索系统目录
    注意:在开发时,给文件起名,不要和系统??槲募孛?/pre>
    

    实验:

    import random
    rand = random.randint(0,10)
    print rand

    这里写图片描述
    6.???06

    断言:可以理解为提前预言,让人更好的知道错误原因

    实验:

    def func(num,p):
     assert (p != 0),'p不能为0'
     return num / p
    print func(10,2)

    这里写图片描述
    7.???07

    在很多python文件中会看到以下格式的代码
     #导入???
     #定义全部变量
     #定义类
     #定义函数
    
     #在代码下方
    
     def main():
      pass
    
     if __name__=='__mian__'
      mian()

    实验:

    建立一个test:
    def say_hello():
     print 'helll hello'
    print __name__
    #在导入的.py文件中,输出是 文件名
    import test

    这里写图片描述

    三.文件

    建立两个名叫README和README_COPY的文件
    建立方法 单击鼠标右键 => New => File
    1.文件-01

    操作文件的函数/方法
    在python中要操作文件需要记住的1个函数和3个方法
     #python中一切皆对象
     open :打开文件,并且返回文件操作对象
     read :将文件内容读取到内存
     write :将指定内容写入文件
     close :关闭文件
    open函数负责打开文件,并且返回文件对象
    read/write/close三个方法都通过文件对象来调用
    
    read方法--读取文件
    open函数的第一个参数是要打开的文件名(文件名区分大小写)
     如果文件存在,返回文件操作对象
     如果文件不存在,会抛出异常
    read方法可以一次性读入并返回文件的所有内容
    close方法负责关闭文件

    实验:

    #如果忘记关闭文件,会造成系统损耗,而且会影响到后续对文件的运行
    #1.打开文件
    file = open('README')
    
    #2.操作文件 读/写
    #read方法:读取文件内容(一次性返回文件的所有内容)
    text = file.read()
    print text
    
    #3.关闭文件
    #close方法:负责关闭文件
    file.close()
    
    #在开发中,通?;嵯缺嘈创蚩凸乇盏拇?/pre>
    

    文件README中:
    这里写图片描述
    实验结果:
    这里写图片描述
    2.文件-02

    文件指针:
     文件指针标记从哪个位置开始读取数据
     第一次打开文件时,通常文件指针会指向文件的开始位置
     当执行了read方法后,文件指针会移动到读取内容的末尾
    #如果忘记关闭文件,会造成系统损耗,而且会影响到后续对文件的运行
    #1.打开文件
    file = open('README')
    
    #2.操作文件 读/写
    #read方法:读取文件内容(一次性返回文件的所有内容)
    text = file.read()
    print text
    
    #3.关闭文件
    #close方法:负责关闭文件
    file.close()
    
    #在开发中,通?;嵯缺嘈创蚩凸乇盏拇?/pre>
    

    文件中README:
    这里写图片描述
    实验结果:
    这里写图片描述
    3.文件-03

    #1.打开文件
    file = open('README')
    
    #2.操作文件 读/写
    #read方法:读取文件内容(一次性返回文件的所有内容)
    text = file.read()
    print text
    
    #打印输入内容的长度
    print type(text)
    print len(text)
    
    
    print '*' * 50
    text = file.read()
    print text
    print len(text)
    #3.关闭文件
    #close方法:负责关闭文件
    file.close()
    
    #在开发中,通?;嵯缺嘈创蚩凸乇盏拇?/pre>
    

    文件中README中:
    这里写图片描述
    实验结果:
    这里写图片描述
    4.文件-04

    打开文件的方式:
     name = open('文件名','访问方式')

    实验:

    #以写的方式打开文件,如果文件存在会被覆盖,如果文件不存在,创建新文件
    #1.打开文件
    file = open('README','w')
    #2.写入文件
    file.write('~~~~~')
    #3.关闭文件
    file.close()

    原文件README中:
    这里写图片描述
    实验结果:
    这里写图片描述
    5.文件-05

    # 以追加方式法开文件
    # 如果该文件存在,文件指针会放在文件的末尾
    # 如果文件不存在,创建文件并写入
    # 1.打开文件
    file = open('README','a')
    # 2.写入文件
    file.write('linux')
    # 3.关闭文件
    file.close()

    原文件README中:
    这里写图片描述
    实验结果:
    这里写图片描述
    6.文件-06

    按行读取文件:
      read方法默认会把文件的所有内容一次性读到内存
      如果文件太大,对内存的占用会非常严重
    readline方法:
      readline方法可以一次性读取一行内容
      方法执行后,会把文件指针移动到下一行,准备再次读取
    

    实验:

    # 读取大文件的正确姿势
    
    file = open('README')
    # 为什么要写成死循环:因为我们不知道要读取的文件有多少行
    while True:
     text = file.readline()
     # 如果文件指定到文件的最后一行,那么就读不到内容
     if not text:
      break
     # 每读取一行,末尾都已经有一个\n
     print text
    file.close()

    文件README中:
    这里写图片描述
    运行结果:
    这里写图片描述
    7.文件-07
    实验:

    #1.打开文件
    #源文件以只读的方式打开
    file_read = open('README')
    #目标文件以写的方式打开
    file_write = open('README_COPY','w')
    
    #从源文件中读取内容
    text = file_read.read()
    #将读取到的内容写到目标文件中
    file_write.write(text)
    
    #关闭文件
    file_read.close()
    file_write.close()

    文件README
    这里写图片描述
    文件和README_COPY
    这里写图片描述
    实验结果:
    README_COPY文件中:
    这里写图片描述
    8.文件-08

    读取大文件

    实验:

    # 1.打开文件
    file_read = open('README')
    file_write = open('README_COPY', 'w')
    #读写
    while True:
     text = file_read.readline()
     if not text:
      break
     file_write.write(text)
    #关闭
    file_read.close()
    file_write.close()

    文件README中
    这里写图片描述
    文件README_COPY中
    这里写图片描述
    实验结果:
    文件README_COPY
    这里写图片描述

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

    建立名叫linux和pi_digits的文件
    1.文件-11

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

    文件pi_digits中
    这里写图片描述
    运行结果:
    这里写图片描述
    2.文件-12

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

    文件pi_digits中:
    这里写图片描述
    运行结果:
    这里写图片描述
    3.文件-13

    filename = 'pi_digits'
    with open(filename) as file_object:
     lines = file_object.readline()
    for line in lines:
     print line

    文件pi_digits中:
    这里写图片描述
    运行结果:
    这里写图片描述
    4.文件-14

    filename = 'linux'
    with open(filename,'w') as file_object:
     file_object.write('I love python.\n')
     file_object.write('I love linux.')

    文件linux中:
    这里写图片描述
    运行结果:
    这里写图片描述
    5.文件-15

    filename = 'linux'
    with open(filename,'a') as file_object:
     file_object.write('I love python.\n')
     file_object.write('I love linux.')

    文件linux中:
    这里写图片描述
    运行结果:
    这里写图片描述

    四.数据储存-json

    很多程序都要求用户输入某种信息
    程序都把用户提供的信息储存在列表和字典等数据结构中,
    用户关闭程序时,你几乎总要保存他们的信息:
    一种简单的方式是使用??閖son来储存数据
    (在python中使用json的时候,主要也就是json???,json是以一种良好的格式来进行数据交互)
    ??閖son让你能够将简单的Python数据结构转存到文件中,
    并在程序再次运行时加载该文件中的数据,
    你还可以使用json在Python程序之间分享数据,
    更重要的是,json数据结构格式并非Python专用的,
    这让你能够将以json格式储存的数据与使用其他编程语言的人分享
    
    注意:json(javascriptObject notation)格式最初是为了javascript开发的,但随后成了一种常见格式,
    被包括python在内的众多语言采用

    实验一:

    import json
    number = [1,2,3,4]
    
    with open('number.json','w') as f_obj:
     # 我们使用函数json.dump()将数字列表储存到文件中
     json.dump(number,f_obj)

    运行结果:
    会生成一个文件:number.json
    这里写图片描述
    实验二:

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

    运行结果:
    这里写图片描述
    实验三:

    import json
    username = raw_input('what is your name?')
    filename = 'username.json'
    with open(filename,'w') as f_obj:
     json.dump(username,f_obj)
     print 'We will remember you when you come back,%s' % username

    运行结果:
    会创建一个文件:username.json
    这里写图片描述
    这里写图片描述
    实验四:
    前提:存在username.json 且存在数据

    import json
    filename = "username.json"
    with open(filename) as f_obj:
     username = json.load(f_obj)
     print 'Welcome back, %s' % username

    这里写图片描述
    实验五:
    前提:存在username.json

    需求:
    如果以前储存了用户,就显示
    否则,就提示用户输入用户名并储存它
    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

    运行结果:
    若username.json存在数据
    这里写图片描述
    若username.json不存在数据
    这里写图片描述

    点击复制链接 与好友分享!回本站首页
    上一篇:python Set Matrix Zeroes 题解
    下一篇:python库下使用pandas的实例教程
    相关文章
    图文推荐
    点击排行

    关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 神奇公式秒杀全国11选5

    版权所有: 神奇公式秒杀全国11选5--致力于做实用的IT技术学习网站

  • 媒体宣传报道重庆日报 王国平:扮靓重庆两江四岸” 让城市有机更新 2019-04-26
  • 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06
  • "新经济形势下金融创新的变革与机遇"论坛 2019-03-06