日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FishC笔记—33 讲 异常处理:你不可能总是对的2

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FishC笔记—33 讲 异常处理:你不可能总是对的2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本期內容詳解:
try語句:

try: 檢測范圍 except Exception[as reason]: 出現異常(Exception)后的處理代碼

try-finally語句:

try: 檢測范圍 except Exception[as reason]: 出現異常(Exception)后的處理代碼 finally: 無論如何都會被執行的代碼

raise語句:
raise 異常的名字

>>> raise ZeroDivisionError('除數為零的異常') <span style="color:#ff0000;">Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> raise ZeroDivisionError('除數為零的異常') ZeroDivisionError: 除數為零的異常</span> >>>

典型課后題
我們使用什么方法來處理程序中出現的異常?`

答:使用 try……except 搭配來捕獲處理程序中出現的異常。

try:檢測范圍來自:bbs.fishc.com except Exception[as reason]:出現異常(Exception)后的處理代碼

一個 try 語句可以和多個 except 語句搭配嗎?為什么?

答:可以。因為 try 語句塊中可能出現多類異常,利用多個 except 語句可以分別捕獲并處理我們感興趣的異常。

try: sum = 1 + '1' f = open('我是一個不存在的文檔.txt') print(f.read()) f.close() except OSError as reason: print('文件出錯啦T_T\n錯誤原因是:' + str(reason)) except TypeError as reason: print('類型出錯啦T_T\n錯誤原因是:' + str(reason))

你知道如何統一處理多類異常嗎?

答:在 except 后邊使用小括號“()”把多個需要統一處理的異常括起來:

try: int('abc') sum = 1 + '1' f = open('我是一個不存在的文檔.txt') print(f.read()) f.close() except (OSError, TypeError): print('出錯啦T_T\n錯誤原因是:' + str(reason))

except 后邊如果不帶任何異常類,Python 會捕獲所有(try 語句塊內)的異常并統一處理,但小甲魚卻不建議這么做,你知道為什么嗎?

答:因為它會隱藏所有程序員未想到并且未做好準備處理的錯誤,例如用戶輸入ctrl+c試圖終止程序會被解釋為KeyboardInterrupt異常。

如果異常發生在成功打開文件后,Python 跳到 except 語句執行,并沒有執行關閉文件的命令(用戶寫入文件的數據就可能沒有保存起來),因此我們需要確保無論如何(就算出了異常退出)文件也要被關閉,我們應該怎么做呢?

答:我們可以使用 finally 語句來實現,如果 try 語句塊中沒有出現任何運行時錯誤,會跳過 except 語句塊執行 finally語句塊的內容。

如果出現異常,則會先執行 except 語句塊的內容再接著執行 finally 語句塊的內容。總之,finally 語句塊里的內容就是確保無論如何都將被執行的內容!

請恢復以下代碼中馬賽克擋住的內容,使得程序執行后可以按要求輸出。
代碼:

輸出:

參考答案:

try: for i in range(3): for j in range(3): if i == 2: raise KeyboardInterrupt print(i, j) except KeyboardInterrupt: print('退出啦!')

還記得我們第一個小游戲嗎?只要用戶輸入非整型數據,程序立刻就會蹦出不和諧的異常信息然后崩潰。請使用剛學的異常處理方法修改以下程序,提高用戶體驗。)

答:這里對可能導致異常的 guess = int(temp) 進行監測

import random secret = random.randint(1,10) print('------------------我愛魚C工作室------------------') temp = input("不妨猜一下小甲魚現在心里想的是哪個數字:") try: guess = int(temp) except ValueError: print('輸入錯誤!') guess = secret while guess != secret: temp = input("哎呀,猜錯了,請重新輸入吧:") guess = int(temp) if guess == secret: print("我草,你是小甲魚心里的蛔蟲嗎?!") print("哼,猜中了也沒有獎勵!") else: if guess > secret: print("哥,大了大了~~~") else: print("嘿,小了,小了~~~") print("游戲結束,不玩啦^_^")

input() 函數有可能產生兩類異常:EOFError(文件末尾endoffile,當用戶按下組合鍵 Ctrl+d 產生)和 KeyboardInterrupt(取消輸入,當用戶按下組合鍵 Ctrl+c 產生),再次修改上邊代碼,捕獲處理 input() 的兩類異常,提高用戶體驗。

import random secret = random.randint(1,10) print('------------------我愛魚C工作室------------------') try: temp = input("不妨猜一下小甲魚現在心里想的是哪個數字:") guess = int(temp) except (ValueError, EOFError, KeyboardInterrupt): print('輸入錯誤!') guess = secret while guess != secret: temp = input("哎呀,猜錯了,請重新輸入吧:") guess = int(temp) if guess == secret: print("我草,你是小甲魚心里的蛔蟲嗎?!") print("哼,猜中了也沒有獎勵!") else: if guess > secret: print("哥,大了大了~~~") else: print("嘿,小了,小了~~~") print("游戲結束,不玩啦^_^")

嘗試一個新的函數 int_input(),當用戶輸入整數的時候正常返回,否則提示出錯并要求重新輸入。
程序實現如圖:

def int_input(prompt=''): while True: try: int(input(prompt)) break except ValueError: print('出錯,您輸入的不是整數!') int_input('請輸入一個整數:')

把文件關閉放在 finally 語句塊中執行還是會出現問題,像下邊這個代碼,當前文件夾中并不存在”My_File.txt”這個文件,那么程序執行起來會發生什么事情呢?你有辦法解決這個問題嗎?

try: f = open('My_File.txt') # 當前文件夾中并不存在"My_File.txt"這個文件T_T print(f.read()) except OSError as reason: print('出錯啦:' + str(reason)) finally: f.close()

答:由于finally語句塊里試圖去關閉一個并沒有成功打開的文件,因此會彈出錯誤內容如下:

>>> 出錯啦:[Errno 2] No such file or directory: 'My_File.txt' Traceback (most recent call last): File "C:\Users\FishC000\Desktop\test.py", line 7, in <module> f.close() NameError: name 'f' is not defined

我們這么修正:

try: f = open('My_File.txt') # 當前文件夾中并不存在"My_File.txt"這個文件T_T print(f.read()) except OSError as reason: print('出錯啦:' + str(reason)) finally: if 'f' in locals(): # 如果文件對象變量存在當前局部變量符號表的話,說明打開成功 f.close()

總結

以上是生活随笔為你收集整理的FishC笔记—33 讲 异常处理:你不可能总是对的2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。