1.路徑處理
1.找模塊:sys.path
import sys print(sys.path)
教程在這里(https://jq.qq.com/?_wv=1027&k=1pYeU9or)
- 1.理解
- 1.是python去查找包或模塊 - 2.項目開始根目錄,python內(nèi)置的目錄 - 3.雖然說python的安裝目錄下也可以存放我們寫的模塊,但是不建議(太多了,不大好找) - 4.如果以后你發(fā)現(xiàn)模塊導(dǎo)入不了了 ,可以使用下sys.path - 5.返回的是一個數(shù)組 - 6.用的時候需要導(dǎo)入sys:import sys - python的目錄,主要放外部的庫,或者第三方的模塊
- 2.兩種導(dǎo)包的方法再去找
- 1.from..module ...import 方法、變量等 - from python_basic.class10_路徑.pac01.module_012 import a print(a) print(sys.path) - 2.from pac ... import module - from python_basic.class10_路徑.pac01 import module_012 print(module_012.a) print(sys.path)
2.獲取文件的路徑
- 1.獲取絕對路徑os.path.abspath(file)
- import os # 獲取絕對路徑 # 固定的寫法 # file 表示運行的文件的名稱 abs_path=os.path.abspath(file) print(abs_path) import os # 當(dāng)前文件的絕對路徑 abs_path=os.path.abspath(__file__) print(abs_path)
- 2.獲取文件的目錄路徑
- 1.os.path.dirname(file) - 不建議用 # 獲取文件的目錄 dir_name = os.path.dirname(__file__) print(dir_name)
- 2.os.path.dirname(abs_path)
- 建議用
- dir_name1 =os.path.dirname(file) dir_name =os.path.dirname(abs_path) abs_path =os.path.abspath(__file__) dir_name =os.path.dirname(abs_path) print(dir_name)
- 3.應(yīng)用場景
- 例子:假設(shè)若需要打開另外一個包pac01下的demo.txt
- 1.思路
- 1.獲取當(dāng)前文件的絕對路徑
abs_path=os.path.abspath(file)
- 2.獲取當(dāng)前文件的目錄路徑
dir_name =os.path.dirname(abs_path)
- 3.當(dāng)前文件的目錄路徑和pac01進行拼接
- 1.推薦方法
txt_file_path=os.path.join(dir_name,“pac01”,“demo.txt”)nPS一般來說,是通過某個文件去獲取項目的跟路徑
abs_path = os.path.abspath(__file__) dir_name =os.path.dirname(abs_path) txt_file_path=os.path.join(dir_name,"pac01","demo006.txt") with open(txt_file_path,encoding="utf-8") as f: print(f.readlines())
- 2.其他方法:不建議用
print(dir_name+'/pac01/demo.txt') # print(dir_name+r'pac01demo.txt') - 這種寫法不建議,因為不同的系統(tǒng),windows一般是,mac是/,改來改去麻煩 - 4.打開文件并讀取 - with open(txt_file_path,encoding="utf8") as f: print(f.read())
- PS:獲取文件路徑時,路徑或文件不一定要真實存在,了解這即可
3.工作目錄
- 1.os.getcwd():獲取當(dāng)前的工作目錄
- 1.你在哪個目錄下運行python程序,輸出的是哪個路徑
print(os.getcwd())
- 2.os.chdir():切換工作目錄
- 3.os.mkdir(“test_dir”)
創(chuàng)建工作目錄nos.mkdir(“test_dir”)
- 4.os.rmdir()
刪除工作目錄nos.rmdir(“test_dir”)
- 5.listdir()
- 獲取當(dāng)前路徑下的目錄列表,返回列表格式數(shù)據(jù)
print(os.listdir())
- 6.os.path.isfile()
- 判斷當(dāng)前文件是否是文件,返回布爾值
- 7.os.path.isdir
- 判斷當(dāng)前文件是否是目錄,返回布爾值
print(os.path.isfile(__file__)) print(os.path.isdir(__file__))
2.異常處理
1.異常理解
- 1.程序如果遇到異常,不會再執(zhí)行
- 2.寫代碼的人不能讓程序遇到異常就終止運行
- 1.捕獲他catch
- 改變程序遇到異常的行為,異常處理,希望程序不要終止,按照我說的辦,叫做異常的捕獲
- 2.拋出他raise
2.異常處理
- 1.異常的捕獲
- 1.基本的寫法:
try:
你要執(zhí)行的可能發(fā)生異常的代碼
except:
程序發(fā)生異常后,你希望程序做的事情n- 1.程序先執(zhí)行try 當(dāng)中的代碼 - 2.但是一旦try當(dāng)中某個代碼報錯,會執(zhí)行跳到except,try剩下的代碼不會執(zhí)行 - 3.例子: - 1.except捕獲了ntry: print("正在運行代碼") a = 1 / 0 print(f"計算結(jié)果:{a}") except: print("1不能除0,你需要改除數(shù)") print("其他的程序")
輸出的結(jié)果是:
“”"
- 2.異常類型的捕獲 - 1.沒有捕獲該類型的情況 - # try:
try: print("正在運行代碼") a=1/0 print(f"計算結(jié)果:{a}") except IndexError: print("1不能除0,你需要改除數(shù)") print("其他的程序") # 只會打印 正在運行代碼,因為報錯了,無法捕獲ZeroDivisionError異常,
- 2.捕獲到該類型的錯誤
try: print("正在運行代碼") a=1/0 print(f"計算結(jié)果:{a}") except ZeroDivisionError: print("1不能除0,你需要改除數(shù)") print("其他的程序")
輸出的結(jié)果是:
- 3.打印異常信息Exception(或某種類型的報錯) as e
- 1.單個異常的 - # 打印異常信息,一般用此方法
try: print("正在運行代碼") a=1/0 print(f"計算結(jié)果:{a}") except ZeroDivisionError as e: print(e) print("其他的程序")
輸出的結(jié)果是:
- 2.多個異常的
try: lst = ['yz', 'addd'] lst[3] a=1/0 except ZeroDivisionError as err: print(err) print("hello word") # IndexError: list index out of rangen- # 捕獲多個時
方法1:
try: {"name":"zhangsan","age":18}['name1'] lst = ['yz', 'addd'] lst[3] a=1/0 except (ZeroDivisionError,IndexError,KeyError) as err: print(err) print("hello word")
打印的結(jié)果:
方法2
try: a = 1 / 0 {"name":"zhangsan","age":18}['name1'] lst = ['yz', 'addd'] lst[3] except ZeroDivisionError as err: print(err) print("ZeroDivisionError") # 抓到這個異常 # division by zero # ZeroDivisionError except IndexError: print("IndexError") # 抓到這個異常 IndexError except KeyError: print("KeyError") # 抓到這個異常 KeyError
打印的結(jié)果:
- 具體用哪個,根據(jù)實際情況來
- 2.try…finally
- 1.finally后的代碼無論正常與否,都會執(zhí)行
- 1.正常的
try: 1/1 print("正常執(zhí)行的代碼") except ZeroDivisionError as e: print("不能除以0") finally: print("無論正常與否,都會執(zhí)行的代碼")
打印的結(jié)果:
- 2.異常的
try: 1/0 print("正常執(zhí)行的代碼") except ZeroDivisionError as e: print("不能除以0") finally: print("無論正常與否,都會執(zhí)行的代碼")
打印的結(jié)果:
- 2.常見應(yīng)用在打開文件后,**關(guān)閉文件** - # 假設(shè)demo.py被打開了
import io try: f=open("demo.py",'a') f.read() except io.UnsupportedOperation as e: print("文件讀取失敗") print(e) finally: f.close() """
打印結(jié)果:
文件讀取失敗
not readablen“”"
- 2.異常的拋出
- 例子1:
def adult_add(a,b): """兩個大于等于18的數(shù)相加;小于18的不能相加""" if (a<18) or (b<18): raise ValueError("參數(shù)必須大于或等于18") c=a+b return c adult_add(18,19) adult_add(3,4) #ValueError: 參數(shù)必須大于或等于18 print("函數(shù)執(zhí)行完畢") """
打印結(jié)果:
File ".../demo03_raise.py", line 13, in adult_add raise ValueError("參數(shù)必須大于或等于18") ValueError: 參數(shù)必須大于或等于18 """
- 2.基于上個例子調(diào)用:
- try: adult_add(3, 4) # ValueError: 參數(shù)必須大于或等于18 except: print("函數(shù)執(zhí)行完畢") # 打印結(jié)果:函數(shù)執(zhí)行完畢
- 3.可用于斷言的場景
3.斷言
1.理解
- 1.assert后面跟一個條件語句,條件不成立就觸發(fā)條件異常 - 2.語法:assert 條件表達式 ### 3.例子 - height=int(input("請輸入身高:")) assert height>180 # 斷言為真時:請輸入身高:181 """ 斷言為假時:請輸入身高:180 Traceback (most recent call last): File ".../demo04_assert.py", line 9, in assert height>180 AssertionError """
最后
今天這篇文章到這里就結(jié)束了,喜歡的小伙伴記得點贊收藏。關(guān)于這篇文章有不懂的地方記得隨時提問
喲?。?!下次見~~~
原文地址:https://mp.weixin.qq.com/s?src=http://ellwoo.com.cn/skin/st05skin/image/nopic.gif>
原文作者:testerStudy