MarkdownPad Document
文法錯誤:過不了Python解釋器
邏輯錯誤
Python解釋器檢測到錯誤,觸發異常,在發生異常時捕捉異常,如果捕捉成功則進入另外一個處理分支,是程式不會崩潰,這就是異常處理 異常處理機制就是來增強程式的健壯性與容錯性
基本文法
exception萬能異常,不管抛出什麼異常都能捕捉到,用一種方法去處理,但是如果想對于不同的異常需要定制不同的處理邏輯,還是要用多分支進行處理
異常的其他形式
主動抛出異常
自定義異常
斷言
try..except的方式比較if的方式的好處
把錯誤處理和真正的工作分開來
代碼更易組織,更清晰,複雜的工作任務更容易實作
毫無疑問,更安全了,不至于由于一些小的疏忽而使程式意外崩潰了
try..except這種異常處理機制就是取代if那種方式,讓你的程式在不犧牲可讀性的前提下增強健壯性和容錯性 異常進行中為每一個異常定制了異常類型(python中統一了類與類型,類型即類),對于同一種異常,一個except就可以捕捉到,可以同時處理多段代碼的異常(無需‘寫多個if判斷式’)減少了代碼,增強了可讀性
try...except應該盡量少用,因為它本身就是你附加給你的程式的一種異常處理的邏輯,與你的主要的工作是沒有關系的,這種東西加的多了,會導緻你的代碼可讀性變差,隻有在有些異常無法預知的情況下,才應該加上try...except,其他的邏輯錯誤應該盡量修正
一個子產品就是一個包含了Python定義和聲明的檔案,檔案名就是子產品名字加上.py的字尾
随着程式的發展,功能越來越多,為了友善管理,通常将程式分成一個個的檔案,這樣程式的結構更加清晰,友善管理,這時不僅僅可以把檔案當做腳本去執行,還可以當做子產品導入到其他子產品中,實作了功能的重複利用。
導入子產品會觸發以下事件:
第一件事:建立名稱空間,用來存放所導入子產品中定義的名字
第二件事:基于剛剛建立的名稱空間執行所導入的子產品
第三件事:建立子產品名指向該名稱空間,子產品.名字 進行操作
子產品可以包含可執行的語句和函數的定義,這些語句的目的是初始化子產品,它們隻在子產品名第一次遇到導入import語句時才執行(import語句是可以在程式中的任意位置使用的,且針對同一個子產品很import多次,為了防止你重複導入,python的優化手段是:第一次導入後就将子產品名加載到記憶體了,後續的import語句僅是對已經加載大記憶體中的子產品對象增加了一次引用,不會重新執行子產品内的語句)。
可以為子產品起别名 import time as mytime print(mytime.time())
可以在一行導入多個子產品,但不建議這麼做
使用此種方式導入的子產品,可以直接使用被導入子產品中命名空間的名字,而不用再使用子產品名.名字 的方式了,但是此時如果有重名的會有覆寫的效果,原理就是python中的變量指派不是一種存儲操作,而隻是一種綁定關系
from...import*
可以将所有不是以下劃線開頭的名字都導入到目前位置,但是一般不建議這麼做,因為不知道導入了哪些名字,有可能會覆寫掉之前已經定義的名字,而且可讀性差。 可以使用all來控制*(用來釋出新版本時)
可以通過子產品的全局變量name來檢視子產品名name = 'main' #當做腳本運作
加載子產品時先看記憶體中是否加載---再找同名的内模組化塊---再找sys.path給出的目錄清單
需要特别注意的是:自定義的子產品名不要與系統的内置子產品重名
包是一種通過使用‘.子產品名’來組織python子產品名稱空間的方式
包的本質就是一個包含init.py檔案的目錄
凡是在導入時帶點的,點的左邊都必須是一個包,但是導入後在使用時就沒有這種限制了,點的左邊可以是包、子產品、函數、類
from後的import導入的子產品必須是明确的一個,不能帶點,否則會有文法錯誤
第一次導入包或者是包的任何其他部分,都會依次執行包下的init.py檔案,此檔案可以為空也可以放一些初始化包的代碼
絕對導入:以最頂層的包作為起始
相對導入:用'.'、'..'的方式作為起始(隻能在一個包中使用,不能用于不同目錄内)
需要特别注意的是:可以用import導入内置或者第三方的子產品,但是要絕對避免使用import來導入自定義包的子子產品,應該使用from...import...的絕對或者相對導入,且包的相對導入隻能用from的形式
本文轉自 AltBoy 51CTO部落格,原文連結:http://blog.51cto.com/altboy/1921182