<dl id="opymh"></dl>

<div id="opymh"></div>
      <div id="opymh"><tr id="opymh"></tr></div>

        <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

        <em id="opymh"></em>

        <em id="opymh"><ol id="opymh"></ol></em>

              頻道欄目
              首頁 > 程序開發 > Web開發 > Python > 正文
              Python下異常、模塊、文件、數據儲存-json等知識講解
              2018-07-27 15:40:12         來源:網絡無法連接的博客  
              收藏   我要投稿

              /home/kiosk一.異常

              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 = '模塊1'
              
              #函數
              def say_hello():
               print '我是 %s' % title
              
              #類
              class Cat(object):
               pass

              test2:

              title = '模塊2'
              
              #函數
              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.如果沒有,在搜索系統目錄
              注意:在開發時,給文件起名,不要和系統模塊文件重名

              實驗:

              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()
              
              #在開發中,通常會先編寫打開和關閉的代碼

              文件README中:
              這里寫圖片描述
              實驗結果:
              這里寫圖片描述
              2.文件-02

              文件指針:
               文件指針標記從哪個位置開始讀取數據
               第一次打開文件時,通常文件指針會指向文件的開始位置
               當執行了read方法后,文件指針會移動到讀取內容的末尾
              #如果忘記關閉文件,會造成系統損耗,而且會影響到后續對文件的運行
              #1.打開文件
              file = open('README')
              
              #2.操作文件 讀/寫
              #read方法:讀取文件內容(一次性返回文件的所有內容)
              text = file.read()
              print text
              
              #3.關閉文件
              #close方法:負責關閉文件
              file.close()
              
              #在開發中,通常會先編寫打開和關閉的代碼

              文件中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()
              
              #在開發中,通常會先編寫打開和關閉的代碼

              文件中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

              很多程序都要求用戶輸入某種信息
              程序都把用戶提供的信息儲存在列表和字典等數據結構中,
              用戶關閉程序時,你幾乎總要保存他們的信息:
              一種簡單的方式是使用模塊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('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技術培訓 | 舉報中心

              版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

              极速飞艇好假
              <dl id="opymh"></dl>

              <div id="opymh"></div>
                  <div id="opymh"><tr id="opymh"></tr></div>

                    <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                    <em id="opymh"></em>

                    <em id="opymh"><ol id="opymh"></ol></em>

                          <dl id="opymh"></dl>

                          <div id="opymh"></div>
                              <div id="opymh"><tr id="opymh"></tr></div>

                                <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                                <em id="opymh"></em>

                                <em id="opymh"><ol id="opymh"></ol></em>