python提供了兩個非常重要的功能來處理python程式在運行中出現的異常和錯誤。你可以使用該功能來調試python程式。
我們可開啟idle-->F1進行檢視文檔,裡面很多異常類型,如圖:
異常即是一個事件,該事件會在程式執行過程中發生,影響了程式的正常執行。
一般情況下,在Python無法正常處理程序時就會發生一個異常。
異常是Python對象,表示一個錯誤。
當Python腳本發生異常時我們需要捕獲處理它,否則程式會終止執行。
捕捉異常可以使用 try/except 語句。
try/except語句用來偵測try語句區塊中的錯誤,讓except語句捕捉異常訊息並處理。
如果你不想在異常發生時結束你的程序,只需在try裡捕獲它。
語法:
以下為簡單的try....except...else的語法:
try
:
#執行別的程式碼
#except
:
如果在try部份引發了'name'異常
except
,:
#如果引發了'name'異常,獲得附加的資料
#else
:
#
##如果沒有例外發生
#!/usr/bin/python
#try
:
##
fh
=
open
(
#"testfile"
#,
"w"
)
#
fh.write(
"This is my test file for exception handling!!"
#)
except
IOError:
print
"Error: can\'t find file or read data"
#else
:
print
"Written content in the file successfully"
#fh.close()
以上程式輸出結果:
Written content
in
the
file
successfully
下面是簡單的例子,它打開一個文件,在該文件中的內容寫入內容,但文件沒有寫入權限,發生了異常:
#!/usr/bin/python
try
:
fh
=
open
(
" testfile"
,
"r"
)
#fh .write(
"This is my test file for exception handling!!"
)
#except
#IOError:
##
print
print
"Error: can\'t find file or read data"
:
#
#print
"Written content in the file successfully"
#Error : can't find file
#
or
##使用except而不帶任何例外類型
你可以不帶任何例外類型使用except,如下實例:
try:
You do your operations here;
.......... ..........
except
:
If there
is
any exception, then execute this block.
......................
#else
:
#
If there
#is
except
(Exception1[, Exception2[,...ExceptionN]]]):
##If there
is
any
exception
from
#the given exception
#the given exception
#list
,
then execute this block.
#
......................
#else
:
no exception then execute this block.#try-finally 語句
try
#
finally
:
#
raise
#注意:你可以使用except語句或者finally語句,但是兩者不能同時使用。 else語句也不能與finally語句同時使用#!/usr/bin/python
#try
:
fh
#
open# (
, "w"
)
fh.write("This is my test file for exception handling!!"
)
##finally:
print
"Error: can\'t find file or read data"如果開啟的檔案沒有可寫權限,輸出如下:
or
read data
同樣的例子也可以寫成如下:##!/usr/bin/python
#try
:
fh
=
open(
, "w"
)
try
#:
#fh.write( #)
#finally:
print
"Going to close the file"
## #
print
"Error: can\'t find file or read data"
當在try區塊中拋出一個異常,立即執行finally區塊程式碼。
finally區塊中的所有語句執行後,異常被再次提出,並執行except區塊程式碼。
參數的內容不同於異常。
一個異常可以帶參數,可作為輸出的例外訊息參數。
你可以透過except語句來捕捉例外的參數,如下所示:
#:
You do your operations here;
#..... ....................
except
ExceptionType, Argument:
You can
print
value of Argument here...
value of Argument here...
元組通常包含錯誤字串,錯誤數字,錯誤位置。
實例以下為單一例外的實例:
#!/usr/bin/python
# Define a function here.def
temp_convert(var):#
try
:
# return
int
(var)
except
ValueError, Argument:
print
"The argument does not contain numbers\n"
temp_convert(
#"xyz "
);
以上程式執行結果如下:The argument does
not#
invalid literal
for
o
#() with base
10
: ##'xyz'
#觸發異常
我們可以使用raise語句自己觸發例外
raise語法格式如下:raise
[Exception [, args [, traceback]]]
#語句中Exception是異常的類型(例如,NameError)參數是一個異常參數值。此參數是可選的,如果不提供,異常的參數是"None"。
實例
一個異常可以是一個字串,類別或物件。 Python的核心提供的異常,大多數都是實例化的類,這是一個類別的實例的參數。
定義一個例外非常簡單,如下:def
functionName( level ):
#
if
level <code>1
:
raise
"Invalid level!"
##, level
, level
# The code below to this would not be executed
##注意:
為了能夠捕獲異常,"except"語句必須有用相同的異常來拋出類別物件或字串。
例如我們捕捉以上異常,"except"語句如下所示:
try:
Business Logic here...
except "Invalid level!"
:
Exception handling here...
else
Rest of the code here...
##使用者自訂異常
透過建立一個新的異常類,程式可以命名它們自己的異常。異常應該是典型的繼承自Exception類,透過直接或間接的方式。
以下為與RuntimeError相關的實例,實例中建立了一個類,基底類別為RuntimeError,用於在異常觸發時輸出更多的資訊。
在try語句區塊中,使用者自訂的例外後執行except區塊語句,變數 e 是用來建立Networkerror類別的實例。
class
Networkerror(RuntimeError):
def
__init__(self
以上是圖文詳解python異常處理方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!