標籤:主線程 card 部分 error 發布 開啟 異常處理 沒有 des
1.完整的異常處理
異常處理能夠保證程式出錯是也能夠完整運行,不會應為bug而停止運行,這裡介紹下擷取異常的完整格式
1 try: 2 num = int(input("輸入整數:")) 3 print(8/num) 4 5 except ValueError: 6 print("請輸入正確的整數!") 7 except ZeroDivisionError: 8 print("不能為0") 9 10 except Exception as result:11 print("未知異常 %s" % result)12 13 else:14 print("成功運行沒有報錯")15 16 finally:17 print("不管有什麼問題,我都要運行!")18 19 print("結束!")
ValueError和ZeroDivisionError是兩個系統存在的異常,表示值錯誤和除(或模數)零 錯誤
通過try對可能存在異常的部分進行檢測,如果有異常,try中代碼不運行,同時檢測except中的異常類型進行匹配,其中Exception表示所有異常,沒有異常則運行else中能代碼
finally中的代碼無論是否有異常都要運行
實際擷取異常中不需要這麼完整,可根據具體情況自行刪減
2.異常的傳遞性
1 def fun():2 num = int(input("輸入整數:"))3 return 10 / num4 5 try:6 print(fun())7 except Exception as result:8 print(result)
異常是有傳遞性的,在函數方法中如果出現了異常,程式是不會直接報異常的,等到運行到主線程中還沒有處理掉這個異常那麼此時就會報異常,同時停止程式
按照原來的思路,需要在每個可能出現異常的地方進行擷取異常,這樣函數方法一多久或造成代碼太過繁瑣
那麼根據異常的傳遞性可以在主線程中進行拋異常
3.自訂拋出異常
1 def fun(): 2 num = input("請輸入9個字元:") 3 4 if len(num) == 9: 5 return num 6 ex = Exception("長度不夠9!") 7 8 raise ex 9 10 try:11 print(fun())12 except Exception as result:13 print(result)
有些時候需要自已定義異常,來滿足開發需求,那麼需要raise 來返回自訂的異常
4.本包內調用其他模組
import card_main
from t1 import function as mmm
import + 模組名,如果模組名太長,可以採用as進行別名
只是擷取一個方法那麼可以採用from + 模組名 + import + 函數名
5.不同包內調用模組
測試包測試匯入pytest內的模組,方法同樣是採用import.pytest.模組名
這裡需要對pytest包內的__init__.py檔案進行編寫
1 from . import t12 from . import 靜態方法
表示允許t1和靜態方法模組被調用
6.__name__
1 def __main():2 print(__name__)3 4 5 if __name__ == "__main__":6 __main()
__name__是Python的內建屬性,當前模組是主線程時為__main__,當前不是時為該模組的名稱,
用這個方法可以成功的把模組中的實現給規避掉
7.發布模組
首先要建立一個項目,把需要共用的模組複製進來,在建立一個setup.py檔案
1 from distutils.core import setup 2 3 setup(name="pytest", # 發布的模組名 4 version="1.0", # 版本號碼 5 description="xxxx模組", # 簡要描述 6 long_description="xxxxxxxxxxxxxxx", # 全部的描述 7 author="lsd", # 作者 8 url="www.baidu.com", # 首頁地址 9 10 # 發布的模組名11 py_modules=["pytest.t1",12 "pytest.靜態方法"]13 )
之後,在該項目目錄下開啟cmd,或者Powershell
python setup.py build 表示編譯
python setup.py sdist 表示發布
python setup.py install 表示安裝
安裝模組工具包還可以採用pip安裝,這裡暫時不介紹
python的異常處理和模組發布安裝