《從零開始的Python筆記》Day#5:例外與檔案處理

更新 發佈閱讀 13 分鐘
raw-image

學習到這個階段,大家如果都有跟上的話已經可以試著自行開發一些工具或是演算法了。不過Python還有提供許多進階的功能可以幫助我們在開發的過程中更順暢、更有效率。

⚠️ 例外處理 (Exception)

不論你是初學者還是資深工程師,在整個程式開發的過程中就是不斷地Debug Debug,有些Bug可以預先設想到,有些則是預期之外的Bug。這些意料之外的Bug非常容易造成程式崩潰,同時你的客戶也會跟著崩潰,最後就換你崩潰了。

能不能有一些機制可以讓我們在開發過程中可以捕捉到更多Bug,降低程式崩潰的機率❓

接下來要介紹的Python 例外處理,可以讓我們了解如何捕捉錯誤以增強程式穩定性,減少各位在開發過程中崩潰的次數。

使用 try-except 捕捉錯誤

程式執行時可能會遇到意料之外的錯誤,例如輸入錯誤、檔案不存在等。例外處理 提供了一種方式來捕捉和應對這些錯誤,從而防止程式崩潰。

# 基本語法
try:
# 嘗試執行可能出錯的代碼
risky_operation()except SpecificError:
# 當發生指定錯誤時執行的代碼
handle_error()
# 範例
try:
number = int(input("Enter a number: "))
print(f"The number you entered is: {number}")
except ValueError:
print("Invalid input! Please enter a valid number.")

# 輸出
Enter a number: abcInvalid input! Please enter a valid number.

else / finally搭配

  • else:當 try 區塊 沒有觸發例外 時執行。
  • finally:無論是否發生例外,都會執行,用於釋放資源或執行收尾工作。
try:
number = int(input("Enter a number: "))
except ValueError:
print("Invalid input!")
else:
print(f"You entered: {number}")
finally:
print("Execution completed.")

# 輸出
Enter a number: 123
You entered: 123
Execution completed.

常見例外類型

raw-image

自定義例外 (Custom Exceptions)

除了使用已經定義好的例外類型,還可以透過繼承Exception類別來自定義新的例外類型。繼承是一種進階的Python技巧,後續的文章中會再詳細說明。

class InvalidAgeError(Exception):
"""當年齡無效時引發的例外"""
def __init__(self, age):
self.age = age
super().__init__(f"Invalid age: {age}. Age must be between 0 and 120.")

# 使用範例
def check_age(age):
if age < 0 or age > 120:
raise InvalidAgeError(age)

try:
check_age(150) # 傳入無效年齡,會引發 InvalidAgeError
except InvalidAgeError as e:
print(f"InvalidAgeError caught: {e}")

#輸出
InvalidAgeError caught: Invalid age: 150. Age must be between 0 and 120.

📂 檔案操作

檔案讀取與儲存是程式開發中一定會做的事情,除了使用numpy讀取np.array、pandas讀取excel等特定格式檔案之外,也可以使用python內建的功能來操作各種檔案。

with open 安全管理檔案操作

with open是Python獨有的語法,能自動管理檔案的關閉操作,避免忘記關閉文件而導致資源洩漏,建議一律使用此方式來進行檔案操作。

# 寫入文件
with open("example.txt", "w") as file:
file.write("This is managed by 'with open'")

# 讀取文件
with open("example.txt", "r") as file:
content = file.read()
print(content)

# 輸出
This is managed by 'with open'

檔案開啟模式

以下是 open() 函數支援的常見模式:

raw-image
# 使用 'w' 寫入模式
with open("test.txt", "w") as file:
file.write("Hello, World!\n")

# 使用 'a' 追加模式
with open("test.txt", "a") as file:
file.write("Adding another line.\n")

# 使用 'r' 讀取模式
with open("test.txt", "r") as file:
content = file.read()
print(content)


# 輸出
執行結果:
Hello, World!
Adding another line.

閱讀檔案內容

# example.txt

Hello, World!
Python is awesome.
This is a test file.

逐字串讀取 (read())

  • 讀取整個檔案內容,或僅讀取指定的字節數
with open("example.txt", "r") as file:
content = file.read(10) # 讀取前 10 個字元
print(content)

# 輸出
Hello, Wor

逐行讀取 (readline() 與 readlines())

  • readline():每次讀取一行。
  • readlines():一次性讀取所有行並返回列表,每行作為一個元素。
# 程式碼
with open("example.txt", "r") as file:
line = file.readline() # 讀取第一行
print(f"First Line: {line.strip()}")

file.seek(0) # 回到檔案開頭
all_lines = file.readlines() # 讀取所有行
print("Remaining Lines:")
for line in all_lines:
print(line.strip())


# 輸出
First Line: Hello, World!

Remaining Lines:
Hello, World!
Python is awesome.
This is a test file.

迴圈逐行讀取

  • 每次讀取一行,內存效率更高
# 程式碼
with open("example.txt", "r") as file:
print("Reading lines using for loop:")
for line in file:
print(line.strip())

# 輸出
Reading lines using for loop:
Hello, World!
Python is awesome.
This is a test file.

寫入檔案內容

write() 寫入資料

  • 清空文件後寫入新內容
# 程式碼
with open("example.txt", "w") as file:
file.write("First line.\n")
file.write("Second line.\n")

# 確認內容
with open("example.txt", "r") as file:
print(file.read())

# 輸出
First line.
Second line.

writelines() 寫入多行

  • 將多行內容一次性寫入文件
# 程式碼
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
with open("example.txt", "w") as file:
file.writelines(lines)

# 確認內容
with open("example.txt", "r") as file:
print(file.read())

# 輸出
Line 1
Line 2
Line 3

檔案刪除

  • 使用os.path.exists()判斷檔案是否存在
  • 使用os.remove()刪除檔案
import os

# 程式碼
if os.path.exists("example.txt"):
os.remove("example.txt")
print("File deleted.")
else:
print("File does not exist.")

# 輸出
File deleted.

JSON 檔案處理

目前來說,開發時最常使用的檔案格式非JSON格式莫屬了!

  • JSON (JavaScript Object Notation) 是一種輕量級的數據交換格式,專為易讀性與結構性而設計
  • 最初基於 JavaScript 的語法,現在已成為一種獨立於語言的通用數據格式,被廣泛應用於網頁開發、API 通訊等場景
  • 常用於API資料傳輸、前後端資料交換等任務

特性

  • 輕量化:簡單且易於解析,專為數據交換設計。
  • 可讀性強:人類可直接閱讀,方便理解與編輯。
  • 跨平台:支持多種編程語言(如 Python、Java、JavaScript)。
  • 結構化數據:通過鍵值對和數組來形成樹狀結構,適合層級數據存儲與傳輸。

常見格式規則

raw-image

JSON格式範例

{
"name": "Alice",
"age": 25,
"address": {
"city": "New York",
"zip_code": "10001"
}
}

JSON檔案操作

raw-image
import json

# 寫入 JSON 文件
data = {"name": "Alice", "age": 25, "is_student": False}
with open("data.json", "w") as file:
json.dump(data, file)

# 讀取 JSON 文件
with open("data.json", "r") as file:
loaded_data = json.load(file)
print(loaded_data)




留言
avatar-img
留言分享你的想法!
avatar-img
Ethan的AI學習筆記
4會員
27內容數
我是一個不務正業的資料科學家,從零開始學習的路途上跌跌撞撞,跌過許多坑,也撞過許多牆... 當有人迷失方向時,希望這些筆記可以成為你的指南針。
Ethan的AI學習筆記的其他內容
2025/08/13
學完Python的基礎課程後,大家對於Python已經有了一定程度的了解,可以開始踏入Python進階的課程了! 這邊將介紹 Python 中的函數、模組與套件,這些技巧可以提升結構化、模組化程式的能力,讓程式碼更易於維護、重用與共享。
Thumbnail
2025/08/13
學完Python的基礎課程後,大家對於Python已經有了一定程度的了解,可以開始踏入Python進階的課程了! 這邊將介紹 Python 中的函數、模組與套件,這些技巧可以提升結構化、模組化程式的能力,讓程式碼更易於維護、重用與共享。
Thumbnail
2025/08/09
資料結構是程式設計的核心基石,直接影響演算法的效率與軟體設計的品質。在開發軟體工具時,選擇合適的資料結構不僅是解決問題的關鍵,也是實現高效與穩健程式的重要步驟。 Python 提供了多樣化的內建資料結構,每一種結構都針對特定的任務情境進行了優化設計。接下來,我們將深入探討這些資料結構的特性與用法,
Thumbnail
2025/08/09
資料結構是程式設計的核心基石,直接影響演算法的效率與軟體設計的品質。在開發軟體工具時,選擇合適的資料結構不僅是解決問題的關鍵,也是實現高效與穩健程式的重要步驟。 Python 提供了多樣化的內建資料結構,每一種結構都針對特定的任務情境進行了優化設計。接下來,我們將深入探討這些資料結構的特性與用法,
Thumbnail
2025/08/03
🔄流程控制 條件判斷 條件判斷語句允許程式執行不同的代碼,依條件結果決定程式執行的邏輯。 if:用於判斷條件是否成立,若成立即執行對應程式碼。 elif:用於指定額外條件,當上方的 if 條件不成立時檢查其他可能性。 else:當所有條件皆不成立時執行。
Thumbnail
2025/08/03
🔄流程控制 條件判斷 條件判斷語句允許程式執行不同的代碼,依條件結果決定程式執行的邏輯。 if:用於判斷條件是否成立,若成立即執行對應程式碼。 elif:用於指定額外條件,當上方的 if 條件不成立時檢查其他可能性。 else:當所有條件皆不成立時執行。
Thumbnail
看更多
你可能也想看
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
蝦皮分潤計畫讓我在分享旅遊文章時,也能透過推薦好物累積被動收入,貼補旅行基金。這篇文章,除了介紹計畫的操作亮點與心得,也分享我最常應用的案例:「旅行必備小物 TOP5」,包含行李鎖、免洗內衣褲、分裝瓶、折疊衣架與真空壓縮袋,幫助出國打包更輕鬆。想同時記錄旅行、分享好物又創造額外收入的你,千萬別錯過!
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
想增加被動收入?加入蝦皮分潤計畫是輕鬆上手的好方法!本文提供完整教學,包含申請流程、賺取分潤技巧,以及實際使用心得分享,助你輕鬆獲得額外收入。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
例外處理是Python中的重要概念,用於控制並處理程序異常,防止程序崩潰和數據損失。它包括try, except, else和finally等語法結構,可用於對特定錯誤進行處理,或主動觸發和自定義異常。
Thumbnail
例外處理是Python中的重要概念,用於控制並處理程序異常,防止程序崩潰和數據損失。它包括try, except, else和finally等語法結構,可用於對特定錯誤進行處理,或主動觸發和自定義異常。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
Thumbnail
本文介紹Python程式設計中處理異常的try, except, else, finally語句,並提供程式範例來更深刻理解使用方法。
Thumbnail
IDE 升級後出現了一樣的錯誤,手上程式碼沒有 pylint black-format 檢查上不了 gitlab,我又點開了那個很小很小的 x 符號,裡面 logs 提示的解決方式是升級..
Thumbnail
IDE 升級後出現了一樣的錯誤,手上程式碼沒有 pylint black-format 檢查上不了 gitlab,我又點開了那個很小很小的 x 符號,裡面 logs 提示的解決方式是升級..
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News