將可能出錯的程式放在try
子句中,如果出現乙個錯誤,程式就會立刻轉到except
處,執行完except
處的**後,程式繼續往下執行。
def
spam
(divideby)
:try
:return
42/divideby
except
:print
('erro:invalid argument!'
)print
(spam(1)
)print
(spam(0)
)print
(spam(2)
)
輸出結果:
42.0
erro:invalid argument!
none
21.0
丟擲異常使用raise語句。
例如:raise exception('this is the error message.')
在執行中如果遇到錯誤,就會丟擲this is the error message.
示例程式:
def
boxprint
(symbol, width, height):if
len(symbol)!=1
:raise exception(
'symbol must be a single character string.'
)if width <=2:
raise exception(
'width must be greater than 2.'
)if height <=2:
raise exception(
'height must be greater than 2.'
)#若條件不滿足則丟擲錯誤資訊
print
(symbol * width)
for i in
range
(height -2)
:print
(symbol +
(' '
*(width -2)
)+ symbol)
print
(symbol * width)
(1) 直接呼叫上述函式:
for sym, w, h in((
'*',4,
4),(
'o',20,
5),(
'x',1,
3),(
'zz',3
,3))
:boxprint(sym, w, h)
輸出結果為:
在執行到('x', 1, 3)
時出錯,錯誤資訊為:
traceback (most recent call last)
: file "d:\資料\python\未命名0.py"
, line 15,in
boxprint(sym, w, h)
file "d:\資料\python\未命名0.py"
, line 5
,in boxprint
raise exception(
'width must be greater than 2.'
)exception: width must be greater than 2
.
出錯之後不再繼續執行。
(2) 配合try …… except
使用:
for sym, w, h in((
'*',4,
4),(
'o',20,
5),(
'x',1,
3),(
'zz',3
,3))
:try
: boxprint(sym, w, h)
except exception as err:
# 將exception的錯誤資訊儲存在變數err中
print(+
str(err)
)
輸出結果為:
在執行到('x', 1, 3)
時出錯,出錯後繼續向後執行,錯誤資訊為:
.except exception as err:
語句可以將函式返回的exception
物件儲存在err
變數中,呼叫str(err)
可以將exception
中的錯誤資訊轉換為字串輸出。
如果python在執行時遇到錯誤,就會生成一些資訊,包括了:出錯訊息、導致該錯誤的**行號,以及導致該錯誤的函式呼叫的序列,類似下面的資訊:
traceback (most recent call last)
: file "d:\資料\python\未命名0.py"
, line 15,in
boxprint(sym, w, h)
file "d:\資料\python\未命名0.py"
, line 5
,in boxprint
raise exception(
'width must be greater than 2.'
)exception: width must be greater than 2
.
但是,使用try……except能直接顯示反向跟蹤資訊,可以通過呼叫traceback.format_exc()
獲取表示反向跟蹤的字串。在呼叫時需要匯入traceback
模組
import traceback
for sym, w, h in((
'*',4,
4),(
'o',20,
5),(
'x',1,
3),(
'zz',3
,3))
:try
: boxprint(sym, w, h)
except
: trace=traceback.format_exc(
)print
(trace)
返回資訊為:
traceback (most recent call last)
: file "d:\資料\python\除錯\丟擲異常.py"
, line 18,in
boxprint(sym, w, h)
file "d:\資料\python\除錯\丟擲異常.py"
, line 5
,in boxprint
raise exception(
'width must be greater than 2.'
)exception: width must be greater than 2
.traceback (most recent call last)
: file "d:\資料\python\除錯\丟擲異常.py"
, line 18,in
boxprint(sym, w, h)
file "d:\資料\python\除錯\丟擲異常.py"
, line 3
,in boxprint
raise exception(
'symbol must be a single character string.'
)exception: symbol must be a single character string.
讓繁瑣的工作自動化 python處理CSV檔案
1.環境 1.python3.8 2.pycharm2020.1 2.讀取本期例項資料 首先匯入csv模組,不需要安裝,python自帶的。import csv要想用csv模組讀取csv檔案資料,需要先建立乙個reader物件,reader可以遍歷檔案的每一行。注意 reader物件只能迴圈遍歷一次...
Python 程式設計快速上手 讓繁瑣工作自動化
第一部分 python程式設計基礎 第 1 章 python基礎 第 2 章 控制流 第 3 章 函式 第 4 章 列表 第 5 章 字典和結構化資料 第 6 章 字串操作 第二部分 自動化任務 第 7 章 模式匹配與正規表示式 第 8 章 讀寫檔案 第 9 章 組織檔案 第 10 章 除錯 第 1...
Python程式設計 讓繁瑣的工作自動化(二)控制流
1.if,elif,else 關鍵字 if elif,else 任意情況下,如果其中一條語句結果為true,那麼另外的所有語句都會跳過,同c c 2.while 迴圈 while 迴圈語句同c c 語言,只要while 的條件為真,就會一直執行迴圈內語句塊 name while name your ...