# 例外處理

許多先進的程式語言都會有例外處理的機制，以避免因為使用者輸入的問題或設定的問題造成程式被迫中斷，或產生不可預期的狀況。最常見的情形是使用者輸入的地方，請檢視以下的程式例：

```python
x = int(input("x=?"))
print("{}的平方是：{}".format(x, x**2))
```

在這個程式中我們讓使用者輸入一個數值放在x，然後印出這個數的平方值。如我們之前所說，input這個函數會預設把輸入的內容當做是字串處理，因此需要在input函數的外圍再加上一個int函數，把字串轉換成數值。儘管我們預期使用者會輸入數字，但是在這個例子中，如果使用者直接按下Enter，或是輸入一個非數字的資料，直譯器就會出現如下所示的錯誤訊息，然後程式就被中斷了：

```
x=? kk
Traceback (most recent call last):
  File "python", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'kk'
```

相信大部份的使用者都會看不懂這個的訊息是什麼，因為它主要是要呈現給程式設計人員看的，目的是為了要協助程式設計人員進行偵錯之用。

為了避免此種情形發生，我們需要使用例外處理，也就是在預期可能會發生錯誤的地方，由程式設計人員事先想好應對的措施，至少也要給個使用者可以理解的訊息。仔細檢查錯誤的地方是在第1行，當使用者輸入的資料如果不是可以轉換成數值的資料（例如是空字串或是英文字），則試圖使用int()函數去轉換它就會發生錯誤。

我們使用例外處理，然後把程式碼修改如下：

```python
x = input("x=?")
try:
    n = int(x)
    print("{}的平方是：{}".format(n, n**2))    
except:
    print("你輸入的資料是不正確的喔，請檢查輸入的是否為數字。")
```

首先在第一行的地方，我們先不做數值轉換的，而是把它放到try這個例外處理指令之後，也就是在第3行的地方。在第3行的地方進行數值的轉換，然後把轉換的結果放在變數n，再計算n的值即可。

如果在try底下的程式區塊有任何一個地方發生任何錯誤的話，在發生錯誤的當下，程式的執行流程就會立即被轉移到except的區塊下，在這個例子中，我們直接假設是發生了數值轉換的錯誤，直接印出說明給使用者瞭解。

當然，發生的錯誤種類有非常多種可能性，在except之後是可以加上參數來瞭解到更多錯誤訊息的，不過這些部份就請各位同學們自行去參閱相關的教學文件了。
