1. 程式人生 > >python中的異常處理相關語句和叠代器

python中的異常處理相關語句和叠代器

spa ble 改變 tee code 必須 後退 發生 true

異常(基礎) exception
什麽是錯誤
錯誤是指由於邏輯或語法等導致一個程序無法正常執行的問題
什麽是異常
異常是程序出錯時標識的一種狀態
當異常發生時,程序不會再向下執行,而轉去調用此函數的地方待處理此錯誤並恢復為正常狀態
作用:
用作信號,通知上層調用者有錯誤產生需要處理
try語句:
兩種語法:
try- except
try --finally 語句
try-except語句
語法:
try:
可能觸發異常的語句
except 錯誤類型1 [as 變量名1]:
異常處理語句1
except 錯誤類型2 [as 變量名2]:


異常處理語句2
except (錯誤類型3,錯誤類型4) [as 變量3]:
異常處理語句3
except:
異常處理語句other
else:
未發生異常語句
finally:
最終語句
作用:
嘗試捕獲異常通知,將程序由異常流程轉為正常流程並繼續執行
說明:
except子句可以有一個或多個,但至少一個
示例I;
練習:
寫一個函數,get_score()來獲取學生輸入的成績(0~100)的數,如果用戶輸入的不是0~100的整數則返回0,
否則返回輸入的整數
def get_score():

try:
x=input(‘請輸入一個數‘)
except:
print(‘unexpect int‘)
else:
if 0<=x<=100:
return 0
else:
return x
get_score()

try-finally 語句
語法:
try:
可能觸發異常的語句
finally:
最終語句
說明:
finally子句不可以省略
一定不會存在except子句


作用:
通常用try-finally語句來做觸發異常時必須要處理的事情,無論異常是否發生,finally子句都會被執行
try-finally 語句不會改變程序的(正常/異常狀態)

def fry_egg():
    print(打開天然氣...)
    try:
        count=int(input(請輸入雞蛋個數:))
        print(完成煎蛋,總煎%d個雞蛋%count)
    finally:
        print(關閉天然氣)
try:
    fry_egg()
except SyntaxError:
    print(煎雞蛋時,發生異常,已轉為正常)

raise 語句:
作用:
觸發一個錯誤,讓程序進入異常狀態
發送錯誤通知給調用者
語法:
raise 異常類型

raise 異常對象

raise # 重新觸發上一次異常
示例見:raise.py
raise2.py

# def make_exercise():
#     print(‘函數開始‘)
#     raise ZeroDivisionError
#     print(‘函數結束‘)
# # make_exercise()
# print(‘程序結束‘)

# try:
#     make_exercise()
# except ZeroDivisionError:
#     print(‘接受到make_ex發出的錯誤通知‘)
# print(‘程序正常結束‘)

def make_exercise():
    print(函數開始)
    # raise ZeroDivisionError
    e=ValueError(值錯誤)  #創建一個錯誤對象
    raise e
    print(函數結束)
# make_exercise()
print(程序結束)

try:
    make_exercise()
except ZeroDivisionError:
    print(接受到make_ex發出的錯誤通知)
except ValueError as err:
    print(valueerror--->,err)
print(程序正常結束)
#此示例示意raise無參的用法

def fa():
    print(----fa----開始)
    raise ValueError(故意制造一個錯誤!)
    print(----fa----結束)
def fb():
    print(fb開始)
    try:
        fa()
    except ValueError as err:
        print(fa裏發生了值錯誤已處理)
        raise
        #此處如果要將err 再次向上傳遞
    print(fb結束)
try:
    fb()
except ValueError:
    raise
    print(再一次收到fb內部發生的錯誤)


練習1
寫一個函數get_age()用來獲取一個人的年齡信息此函數規定用戶只能輸入1~140之間的整數,如果用戶輸入得數是其他
的數值,則直接觸發valueError類型錯誤!
如:

def get_age():
    x=int(input(請輸入您的年齡,範圍(1~140)))
    # if x not in range(1,140):
    #     raise ValueError(‘類型錯誤‘)
    if x<1:
        raise ValueError(您的年齡太小)
    if x>140:
        raise ValueError(您的年齡太大)
    return x
try:
    age=get_age()
    print(用戶輸入的年齡是,age)
except ValueError as err:
    # raise
    print(用戶輸入的不是140以內的數字,獲取年齡失敗)
    print(err=,err)

aseert 語句
語法:
assert 真值表達式,錯誤數據(通常是字符串)
作用:
當真值表達式為false時,用錯誤數據創建一個AssertionError類型錯誤,並進入異常狀態
等同於:
if bool(真值表達式)==False:
raise AssertionError(錯誤數據)
示例見:
assert.py

def get_score():
    s=int(input(請輸入學生成績:(0~100)))
    assert 0<=s<=100 ,"成績超出範圍"
    #if bool(0<=s<=100):
        # raise AssertionError("成績超出範圍")
    return s
try:
    score=get_score()
    print(學生的成績為:,score)
except AssertionError as err:
    print(AssertionError類型的錯誤被觸發,且已捕獲)
    print(err=,err)


小結:
異常處理相關的語句
try-except
作用:捕獲異常通知,將程序有異常狀態轉為正常狀態
try-finally
作用:執行必須要執行的語句
raise
作用:觸發異常(拋出異常),讓程序進入異常流程
assert
作用:根據條件來觸發AssertionError類的異常並進入異常流程
叠代器 Iterator
什麽是叠代器
叠代器是訪問可叠代對象的工具
叠代器是指用iter(obj)函數返回的對象(實例)
叠代器可以用next(it)函數獲取可叠代對象的數據
叠代器函數:
iter(iterable)從可叠代對象中返回一個叠代器,iterable必須是能提供一個叠代器的對象
next(iteerable)從叠代器iterable中獲取下一個記錄,如果無法獲取下一條記錄,則觸發
StopIteration異常通知
說明:
叠代器只能往前取值,不會後退
示例:
l=[1,2,3,4]
it=iter(l)
print(next(it))

示例:#用叠代器和while來代替for循環
iterator.py
練習:
有一個集合:
s={‘唐僧‘,‘悟空‘,‘白潔‘,‘沙僧‘}
用for進行遍歷

s={唐僧,悟空,白潔,沙僧}
it=iter(s)
while True:
    try:
        print(next(it))
    except StopIteration:
        print(Bianlijieshu)
        break

python中的異常處理相關語句和叠代器