0%

Python 的 try-except

例外處理

當我們寫程式時,會發生一些錯誤,像是 list 超出範圍、 open file 卻找不到檔案等等。
這些電腦都會進行報錯,但是我們不想中斷程式,想繼續進行時該怎麼辦呢?

這時候我們就使用 try-exccept 語法。

舉個例子: 我們進行 open example.txt,但是事實上並沒有這個檔案會發生什麼事?

1
# -*- coding: utf-8 -*-
2
3
file = open('example.txt','r')
4
---------------執行結果---------------
5
    file = open('example.txt','r')
6
FileNotFoundError: [Errno 2] No such file or directory: 'example.txt'

如預期的,電腦告訴我們找不到 example.txt 這個檔案。

當遇到這個問題,我們想要問 user 是否要創這個檔案時,可以使用 try 的語法:

1
# -*- coding: utf-8 -*-
2
3
try:
4
    file = open('example.txt','r')
5
except Exception as error:
6
    print('there is no file!')
7
    response = input("do you want to create new file?[y/n]: ")
8
    if response == 'y':
9
        file = open('example.txt','w')
10
    else:
11
        pass
12
else:
13
    print("open successfully!")

來說明這段 code:

  1. 首先,我們先執行 try 來打開文件。
  2. 如果有錯誤我們就執行 except 來處理錯誤,我們把錯誤的細節存放在 error 這個 variable,之後詢問 user 是否要創建這個檔案。
    事實上有很多種 exception
    運用 某個Exception as error 的方式來處理特定 exception,
    這個例子是處理全部的 exception
  3. 第12行的 else 則是 try的語句沒有報錯時才來執行。

製作自己的 exception

通常所有的 exception 都被定義在 Python 裡面,但我們也可以自己創建一個 exception。

except 是一個 class ,他是 Exception 的 子類別。這個例子是製作一個 exception 叫做 UppercaseException,當遇到大寫的單字就會丟出這個 exception。

1
# -*- coding: utf-8 -*-
2
class UppercaseException(Exception):
3
    pass
4
5
words = ['apple','cat','dog','MOMO']
6
for word in words:
7
    if word.isupper():
8
        raise UppercaseException(word)
9
---------------執行結果---------------
10
line 9, in <module>
11
    raise UppercaseException(word)
12
__main__.UppercaseException: MOMO

資料來源:

精通 Python:運用簡單的套件進行現代運算