iT邦幫忙

2024 iThome 鐵人賽

DAY 21
1
自我挑戰組

每日挑戰:從零開始的 Python 學習之旅系列 第 21

【Day 21】錯誤和例外狀況篇

  • 分享至 

  • xImage
  •  

Hi 大家好,

今天要開始介紹Python中的錯誤和例外狀況篇,那我們開始吧!

文法錯誤(Syntax Error)

Q: 什麼是文法錯誤?
A: 就是字面上意思,你寫的程式碼不符合Python的語法規則。這些錯誤通常是在程式執行之前由 Python 的解譯器(Interpreter)檢測到的,文法錯誤會導致程式無法往下執行。

舉個例子:

  • 只要不符合Python語法規則就會跳出錯誤提醒你,很好
for number in range(0, 5)
    print(number)
PS D:\Project\practice> python hi.py
  File "D:\Project\practice\hi.py", line 2
    for number in range(0, 5)
                             ^
SyntaxError: expected ':'
PS D:\Project\practice>

例外狀況(Exception)

Q: 什麼是例外狀況?
A: 指的是程式執行過程中發生錯誤。這些錯誤不會在程式編譯時被檢測到,而是在程式執行時發生

舉個例子:

  • 錯誤訊息的最後一行會說明發生了什麼事。例外狀況有不同的類型,並且類型會當作訊息一樣列印出來。
  • 範例中的類型是ZeroDivisionError,TypeErrorNameError
>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>>

>>> '2' + 999
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>>

>>> 4 + sdfsfd*3  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sdfsfd' is not defined
>>>

例外處理(Exception Handling)

Q: 如何攔截例外狀況?
A: 在程式中可以使用 tryexcept 來捕捉和處理例外狀況,可以防止程式因未處理的例外而當掉,停止運作。這樣的處理可以讓程式在發生例外時仍然能夠繼續運行。

舉個例子:

  • 在攔截到例外狀況後,可以加註解釋讓操作者可以很明確的知道發生什麼樣的錯誤,後續加以修正。
try:
    result = 10 * (1/0)
except ZeroDivisionError:
    print("不能除以零!")
PS D:\Project\practice> python hi.py
不能除以零!
PS D:\Project\practice>

引發例外(Raising Exceptions)

Q: 什麼是引發例外?
A: 指的是你在寫程式的過程中,可以預想而知某個地方可能會發生錯誤,因此建立拋出一個例外。這通常用於在特定情況下主動中斷程式的正常流程,發出一個錯誤訊息。

def divide(a, b):
    if b == 0:
        raise ValueError("除數不能為零")
    return a / b

try:
    result = divide(10, 0)
except ValueError as e:
    print(f"錯誤: {e}")
PS D:\Project\practice> python hi.py
錯誤: 除數不能為零
PS D:\Project\practice>

那今天就介紹到這裡,我們明天見~


上一篇
【Day 20】進階語法 - 物件導向概念篇 - 續集
下一篇
【Day 22】錯誤和例外狀況篇 - 續集
系列文
每日挑戰:從零開始的 Python 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言