程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python----異常處理、斷言和路徑處理,簡單、清晰版

編輯:Python

1.路徑處理

1.找模塊:sys.path

import sys
print(sys.path)

- 1.理解

 - 1.是python去查找包或模塊
- 2.項目開始根目錄,python內置的目錄
- 3.雖然說python的安裝目錄下也可以存放我們寫的模塊,但是不建議(太多了,不大好找)
- 4.如果以後你發現模塊導入不了了 ,可以使用下sys.path
- 5.返回的是一個數組
- 6.用的時候需要導入sys:import sys
- python的目錄,主要放外部的庫,或者第三方的模塊

- 2.兩種導包的方法再去找

python學習交流Q群:903971231####
- 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
# 當前文件的絕對路徑
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.應用場景

  • 例子:假設若需要打開另外一個包pac01下的demo.txt

  • 1.思路

    • 1.獲取當前文件的絕對路徑

      • abs_path=os.path.abspath(file)
    • 2.獲取當前文件的目錄路徑

      • dir_name =os.path.dirname(abs_path)
    • 3.當前文件的目錄路徑和pac01進行拼接

      • 1.推薦方法

        • txt_file_path=os.path.join(dir_name,“pac01”,“demo.txt”)

        • PS一般來說,是通過某個文件去獲取項目的跟路徑

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.其他方法:不建議用
python學習交流Q群:903971231###
- # print(dir_name+'/pac01/demo.txt')
# print(dir_name+r'\pac01\demo.txt')
- 這種寫法不建議,因為不同的系統,windows一般是\,mac是/,改來改去麻煩
- 4.打開文件並讀取
- with open(txt_file_path,encoding="utf8") as f:
print(f.read())
  • PS:獲取文件路徑時,路徑或文件不一定要真實存在,了解這即可

3.工作目錄

  • 1.os.getcwd():獲取當前的工作目錄

    • 1.你在哪個目錄下運行python程序,輸出的是哪個路徑
print(os.getcwd())

  • 2.os.chdir():切換工作目錄

  • 3.os.mkdir(“test_dir”)

    • 創建工作目錄

    • os.mkdir(“test_dir”)

  • 4.os.rmdir()

    • 刪除工作目錄

    • os.rmdir(“test_dir”)

  • 5.listdir()

    • 獲取當前路徑下的目錄列表,返回列表格式數據
print(os.listdir())

  • 6.os.path.isfile()

    • 判斷當前文件是否是文件,返回布爾值
  • 7.os.path.isdir

    • 判斷當前文件是否是目錄,返回布爾值
print(os.path.isfile(__file__))
print(os.path.isdir(__file__))

2.異常處理

1.異常理解

  • 1.程序如果遇到異常,不會再執行

  • 2.寫代碼的人不能讓程序遇到異常就終止運行

    • 1.捕獲他catch

      • 改變程序遇到異常的行為,異常處理,希望程序不要終止,按照我說的辦,叫做異常的捕獲
    • 2.拋出他raise

2.異常處理

  • 1.異常的捕獲

    • 1.基本的寫法:

try:

你要執行的可能發生異常的代碼

except:

程序發生異常後,你希望程序做的事情

- 1.程序先執行try 當中的代碼
- 2.但是一旦try當中某個代碼報錯,會執行跳到except,try剩下的代碼不會執行
- 3.例子:
- 1.except捕獲了
try:
print("正在運行代碼")
a = 1 / 0
print(f"計算結果:{
a}")
except:
print("1不能除0,你需要改除數")
print("其他的程序")

輸出的結果是:

“”"

 - 2.異常類型的捕獲
- 1.沒有捕獲該類型的情況
- # try:
try:
print("正在運行代碼")
a=1/0
print(f"計算結果:{
a}")
except IndexError:
print("1不能除0,你需要改除數")
print("其他的程序")
# 只會打印 正在運行代碼,因為報錯了,無法捕獲ZeroDivisionError異常,

 - 2.捕獲到該類型的錯誤
try:
print("正在運行代碼")
a=1/0
print(f"計算結果:{
a}")
except ZeroDivisionError:
print("1不能除0,你需要改除數")
print("其他的程序")

輸出的結果是:

  • 3.打印異常信息Exception(或某種類型的報錯) as e

    - 1.單個異常的
    - # 打印異常信息,一般用此方法
    
try:
print("正在運行代碼")
a=1/0
print(f"計算結果:{
a}")
except ZeroDivisionError as e:
print(e)
print("其他的程序")

輸出的結果是:


 - 2.多個異常的
try:
lst = ['yz', 'addd']
lst[3]
a=1/0
except ZeroDivisionError as err:
print(err)
print("hello word")
# IndexError: list index out of range
 - # 捕獲多個時

方法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")

打印的結果:

方法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

打印的結果:

 - 具體用哪個,根據實際情況來
  • 2.try…finally

    • 1.finally後的代碼無論正常與否,都會執行

      • 1.正常的
try:
1/1
print("正常執行的代碼")
except ZeroDivisionError as e:
print("不能除以0")
finally:
print("無論正常與否,都會執行的代碼")

打印的結果:


 - 2.異常的
try:
1/0
print("正常執行的代碼")
except ZeroDivisionError as e:
print("不能除以0")
finally:
print("無論正常與否,都會執行的代碼")

打印的結果:

- 2.常見應用在打開文件後,**關閉文件**
- # 假設demo.py被打開了
import io
try:
f=open("demo.py",'a')
f.read()
except io.UnsupportedOperation as e:
print("文件讀取失敗")
print(e)
finally:
f.close()
"""

打印結果:

文件讀取失敗

not readable

“”"

  • 2.異常的拋出

    • 例子1:
def adult_add(a,b):
"""兩個大於等於18的數相加;小於18的不能相加"""
if (a<18) or (b<18):
raise ValueError("參數必須大於或等於18")
c=a+b
return c
adult_add(18,19)
adult_add(3,4) #ValueError: 參數必須大於或等於18
print("函數執行完畢")
"""

打印結果:

 File ".../demo03_raise.py", line 13, in adult_add
raise ValueError("參數必須大於或等於18")
ValueError: 參數必須大於或等於18
"""
  • 2.基於上個例子調用:
 - try:
adult_add(3, 4) # ValueError: 參數必須大於或等於18
except:
print("函數執行完畢")
# 打印結果:函數執行完畢
  • 3.可用於斷言的場景

3.斷言

1.理解

- 1.assert後面跟一個條件語句,條件不成立就觸發條件異常
- 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 """

最後

今天這篇文章到這裡就結束了,喜歡的小伙伴記得點贊收藏。關於這篇文章有不懂的地方記得隨時提問

喲!!!下次見~~~


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved