# 常見的 Python 錯誤訊息
> 作者:王一哲
> 日期:2022/3/14
<br />
## 前言
我在改多元選修的 VPython 作業時,經常會遇到學生的程式碼裡有一些小錯誤,導致程式無法運行。如果是語法上的錯誤,通常可以從 Python IDLE 回傳的錯誤訊息裡找到程式碼中的問題。以下是我比較常遇到的錯誤及解決方法,測試用的版本為 Python 3.9.10,作業系統為 Windows 10 64-bit 家用版。之後如果有遇到其它的錯誤種類,會再更新這篇文章的內容。
<br />
## 語法錯誤 Syntax Error
### 未預期的縮排 unexpected indent
如果執行以下的程式碼會遇到如下圖的錯誤訊息,這是因為第6行的縮排為5格,由於預設的縮排為4格,直譯器不知道這行是否為 if 成立時會運作的程式碼。
```python=
a = 1
b = 0
if a > b:
print("True")
print("a > b")
```
<br />
<img style="display: block; margin-left: auto; margin-right: auto" height="35%" width="35%" src="https://imgur.com/EMKTABP.png">
<div style="text-align:center">SyntaxError: unexpected indent</div>
<br /><br />
### 括弧不成對 unmatched ')'
如果執行以下的程式碼會遇到如下圖的錯誤訊息,這是因為第5行最後多了一個右括弧。當程式碼較為複雜時,這個狀況會更容易發生,因此許多的編輯器會自動將兩個成對的括弧標示成相同的顏色,或是在輸入右側的括弧時如果有對應的左括弧會將這段程式碼反白一下。
```python=
a = 1
b = 0
if a > b:
print("True"))
print("a > b")
```
<br />
<img style="display: block; margin-left: auto; margin-right: auto" height="35%" width="35%" src="https://imgur.com/zNhogmy.png">
<div style="text-align:center">SyntaxError: unmatched ')'</div>
<br /><br />
### 有問題的字元 ')'
如果執行以下的程式碼會遇到如下圖的錯誤訊息,這是因為第5行最後的右括弧是全形字元,這是用眼睛很難辨認的錯誤,所以我習慣在輸入程式碼時會切換成英文輸入法,避免不小心多按了一下 Shift 或是 Ctrl 切換成中文,輸入了全形字元。
```python=
a = 1
b = 0
if a > b:
print("True")
print("a > b")
```
<br />
<img style="display: block; margin-left: auto; margin-right: auto" height="35%" width="35%" src="https://imgur.com/GdRiVCA.png">
<div style="text-align:center">SyntaxError: invalid character ')'</div>
<br /><br />
## 分母為零 ZeroDivisionError
由於分母為零會使分數的值變為無窮大,如果執行以下的程式碼會回傳錯誤訊息 **ZeroDivisionError: division by zero**。
```python
a = 0
b = 1/a
```
<br />
錯誤訊息
```python
Traceback (most recent call last):
File "C:\Users\[UserName]\Desktop\error.py", line 2, in <module>
b = 1/a
ZeroDivisionError: division by zero
```
<br /><br />
## 未安裝函式庫造成的錯誤 ModuleNotFoundError
如果程式碼中需要引入某些未安裝的函式庫,執行時會回傳錯誤訊息 **ModuleNotFoundError**,例如以下的程式碼
```python=
from vpython import *
scene = canvas(title="Ball", width=400, height=400, background=color.black)
ball = sphere(pos=vec(0, 0, 0), raduis=1, color=color.red)
```
<br />
錯誤訊息的最後一行代表沒有安裝名為 vpython 的函式庫。
```python
Traceback (most recent call last):
File "C:\Users\[UserName]\Desktop\error.py", line 1, in <module>
from vpython import *
ModuleNotFoundError: No module named 'vpython'
```
<br />
只要安裝想缺少的函式庫即可,開啟 **Windows PowerShell (系統管理員)** 並執行以下的指令。
```shell
pip install [函式庫名稱]
```
<br /><br />
## 未引入函式庫造成的錯誤 NameError
如果程式碼中用到特定函式庫提供的函式,但是在程式碼中卻沒有先引入函式庫,執行時會回傳錯誤訊息 **NameError**,例如以下的程式碼需要用到 vpython 提供的函式,但是少了 **from vpython import \***。
```python=
scene = canvas(title="Ball", width=400, height=400, background=color.black)
ball = sphere(pos=vec(0, 0, 0), raduis=1, color=color.red)
```
<br />
錯誤訊息
```python
Traceback (most recent call last):
File "C:\Users\[UserName]\Desktop\error.py", line 1, in <module>
scene = canvas(title="Ball", width=400, height=400, background=color.black)
NameError: name 'canvas' is not defined
```
<br /><br />
---
###### tags: `Python`