python學習day21 包 異常處理

2022-06-19 21:09:09 字數 3316 閱讀 2269

包的本質就是乙個包含__init__.py檔案的目錄

在python3中,即使包下沒有__init__.py檔案,import 包仍然不會報錯,而在python2中,包下一定要有該檔案,否則import 包報錯

凡是在匯入時帶點的,點的左邊都必須是乙個包

如果不想在匯入模組時打很多點,可以新增路徑:

#

檢視可匯入模組的路徑:

print

(sys.path)

#新增路徑

路徑')

不管是哪種方式,只要是第一次匯入包或者是包的任何其他部分,都會依次執行包下的__init__.py檔案(我們可以在每個包的檔案內都列印一行內容來驗證一下),這個檔案可以為空,但是也可以存放一些初始化包的**。

絕對匯入:直觀,但是不能匯入

相對匯入:用.或者..的方式最為起始(只能在乙個包中使用,不能用於不同目錄內) 缺點:包裡的模組如果想使用其它模組的內容只能使用相對路徑,使用了相對路徑就不能在包內直接執行了

在glance/api/version.py

#絕對匯入

from glance.cmd import

manage

manage.main()

#相對匯入

from ..cmd import

manage

manage.main(

軟體開發規範

#

# start.py

import

sys,os

base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #

獲取上層目錄

將上層目錄新增進直譯器路徑中

bin ---開始檔案 程式入口

conf ---配置檔案

core ---程式核心**

db ---資料檔案

lib ---包 自己寫的通用模組

log ---日誌 記錄

異常處理錯誤:語法錯誤

邏輯錯誤

常用異常

attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror 使用乙個還未被賦予物件的變數

syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

使用try...except不中斷程式

萬能異常:exception

try

:

print('

1111')

print('

2222')

ret = int(input('

number >>>'))

print(ret*'*'

)except

exception as error:

print('

你錯了,老鐵

',error) # 如果錯了,會給出異常資訊

獲取異常詳細資訊

try

: res_bb =eval(funcname)

except

:

print('

failed to execute :

'.format(t, sys.exc_info()))

finally

finally和return相遇的時候 依然會執行

s1 = '

hello

'try

: int(s1)

except

indexerror as e:

print

(e)except

keyerror as e:

print

(e)except

valueerror as e:

print

(e)#

except exception as e:

#print(e)

else

:

print('

try內**塊沒有異常則執行我')

finally

:

print('

無論異常與否,都會執行該模組,通常是進行清理工作

')

自定義異常

class

evaexception(baseexception):

def__init__

(self,msg):

self.msg=msg

def__str__

(self):

return

self.msg

try:

raise evaexception('

型別錯誤')

except

evaexception as e:

print(e)

斷言

assert 條件

python學習day21 模組和包

序列化模組 資料型別轉化成字串的過程 為了方便儲存和網路傳輸 三種模式 json dumps loads dump 和檔案有關 load 不能load多次 import json data json dic json.dumps data,sort keys true,indent 4,separa...

python學習筆記 day21 包和異常

通俗的講之前我們學序列化模組時,有個json 它其實是乙個資料夾 裡面有很多py檔案 應該就算是乙個包 然後匯入包的時候,前面一定是乙個包名,然後可以有兩種方式import 包名 或者 from 包 import 模組 這種匯入方式 包那塊可以有.但是import 後面必須是乙個變數名,絕對不能有....

day21 學習總結

string s new string 建立乙個空的字串序列 string s new string hello 建立乙個內容為 hello 的字串 string s hello 建立乙個內容為 hello 的字串 string s new string char chars 通過字元陣列建立乙個字...