例外處理
當我們寫程式時,會發生一些錯誤,像是 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:
- 首先,我們先執行
try
來打開文件。 - 如果有錯誤我們就執行
except
來處理錯誤,我們把錯誤的細節存放在error
這個 variable,之後詢問 user 是否要創建這個檔案。
事實上有很多種 exception
運用某個Exception as error
的方式來處理特定 exception,
這個例子是處理全部的 exception - 第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 |