目錄
什么是異常?
異常的捕獲方法:
為什么要捕獲異常?
捕獲異常的語法:
異常的else和finally語法:
什么是異常?
異常就是程序運行過程中出現了錯誤,也就是我們常說的出bug了-。-
異常的捕獲方法:
為什么要捕獲異常?
在可能發生異常的地方,進行捕獲。當異常出現的時候,提供解決方式,而不是任由其導致程序無法運行。
捕獲異常的語法:
1.try:
可能出現異常的語句
2.except? (異常)? as? 別名:
出現異常執行的語句
3.except? Exception?? as? 別名:
捕獲所有的異常
#演示捕獲異常#基本捕獲語法
try:f = open('C;\\abc.txt','r',encording='utf-8')
except:print("出現異常了,因為abc文件不存在")
'''結果:出現異常了,因為abc文件不存在'''#捕獲指定異常:
try:print(name)
except NameError as e:print(f"出現異常了,原因是{e}")
'''結果:出現異常了,原因是name 'name' is not defined'''如果出現了其他類型異常,則不能捕獲,例如:
try:f = open('C;\\abc.txt','r',encording='utf-8')
except NameError as e:print(f"出現異常了,原因是{e}")
'''
Traceback (most recent call last):File "D:\opython工程\go-learn\5.7.py", line 1143, in <module>f = open('C;\\abc.txt','r',encording='utf-8')
TypeError: 'encording' is an invalid keyword argument for open()
''' #捕獲多個異常
try:1/0print(name)
except (NameError,ZeroDivisionError) as e:print(f"出現異常了,原因是{e}")
#未正確設置捕獲異常類型,將無法捕獲異常#捕獲所有異常
try:1/0print(name)
except Exception as e:print(f"出現異常了,原因是{e}")
'''結果:出現異常了,原因是division by zero'''
異常的else和finally語法:
else:
沒出現異常執行的語句
finally:
不管有無異常都執行后面的語句
#else在未出現異常時執行的代碼
try:print(123)
except Exception as e:print(f"出現異常了,原因是{e}")
else:print("沒出現異常")
'''結果
123
沒出現異常
'''#無論有沒有異常都執行finally后面的代碼
try:print(name)
except Exception as e:print(f"出現異常了,原因是{e}")
finally:print("沒出現異常")
'''結果:
出現異常了,原因是name 'name' is not defined
沒出現異常
'''
異常的傳遞性:
在 Python 中,異常的傳遞性(也稱為異常的傳播)是指當異常在函數或方法中被觸發但未被捕獲時,它會自動向上(向調用棧的上層)傳遞,直到被捕獲處理或導致程序終止。
碰到異常代碼會終止
def func1():print("func1開始執行")1/0print("func1結束執行")def func2():print("func2開始執行")func1()print("func2結束執行")
def main():func2()main()
在調用函數時,仍然可以使用try和except接收異常
def func1():print("func1開始執行")1/0print("func1結束執行")def func2():print("func2開始執行")func1()print("func2結束執行")def main():try:func2()except Exception as e:print(f"出錯了,原因是{e}")main()
模塊的概念和導入:
什么是模塊?
模塊就是一個Python代碼文件,內含類、函數、變量等,我們可以導入進行使用。
如何導入?
1. import? 模塊名? ?:直接導入
2.from? 模塊? import? 功能? : 導入模塊的指定功能
3.as可以指定別名
#演示Python的模塊導入#使用import導入time模塊使用sleep功能(函數)
import time
print("吃了嗎")
time.sleep(3)
print("吃了")#使用from導入time的sleep功能(函數)
from time import sleep
print("吃了嗎")
sleep(3)
print("吃了")#使用*導入time模塊的全部功能
from time import *
print("吃了嗎")
sleep(3)
print("吃了")
print(localtime())#使用as給模塊改名
import time as f
print("吃了嗎")
f.sleep(3)
print("吃了")#使用as給模塊的特定功能改名
from time import sleep as sl
print("吃了嗎")
sl(3)
print("吃了")
自定義python包:
什么是Python的包?
? ? 包就是一個文件夾,里面可以存放許多Python的模塊(代碼文件),通過包,在邏輯上將一批模塊歸為一類,方便使用。
如何自定義:
1:創建一個package包
2:創建一個python文件
3:在此文件中編寫函數功能
4:可以像調用模塊的那樣調用mod1中的函數
import mypackage.mod1
或者
from mypackage.mod1 import ppp
ppp()#結果是123
all 變量的作用
同模塊中學習到的是一個作用,控制 import*能夠導入的內容
在_init_文件中定義all變量,可以控制 import*能夠導入的內容,只有all變量中的函數可以被導入
如何導入第三方pyhton包:
安裝成功后可以import導入使用
方法一:使用cmd命令提示符
格式:
pip? install? 包名? ?
pip? install? -i? ??https://pypi.tuna.tsinghua.edu.cn/simple? 包名? :從國內鏡像站下載速度更快
方法二:pycharm中安裝包
?
綜合案例:
------------------這是str_util.py的代碼-----------------------------------def str_reserve(s):s=input("請輸入一個字符串\n")s=s[::-1]print(f"這個字符串反轉后是:\n{s}")def str_sub():s = input("請輸入一個字符串\n")x=int(input("請輸入起始下標\n"))y=int(input("請輸入終止下標\n"))s_sub=s[x:y]print(s_sub)------------------這是file_util.py的代碼-----------------------------------def print_file_info():name=input("請輸入文件名\n")f= Nonetry:f=open(f"{name}",'r',encoding='utf-8')print(f)except:print("出現異常了,因為文件不存在\n")finally:if f is not None:f.close()def append_to_file():f = Nonename = input("請輸入文件名\n")try:f = open(f"{name}", 'a', encoding='utf-8')data = input("請輸入追加內容\n")f.write(f"{data}\n")except:print("出現異常了,因為文件不存在\n")finally:if f is not None:f.close()------------------這是代碼調用測試-----------------------------------import mypackage.str_util
import mypackage.file_utilstr_sub()
str_reserve()print_file_info()
append_to_file()
這是我的個人學習筆記,主要用于記錄自己對知識點的理解和梳理。由于目前仍在學習探索階段,內容中難免存在理解偏差或表述疏漏,懇請各位大佬不吝賜教,多提寶貴意見~ 若有不同看法,歡迎理性交流探討,感謝包容與指正!