中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么避免濫用try...except

發布時間:2021-11-02 16:00:16 來源:億速云 閱讀:210 作者:iii 欄目:編程語言

這篇文章主要講解了“Python中怎么避免濫用try...except”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python中怎么避免濫用try...except”吧!

有不少人在寫 Python 代碼時,喜歡用 try...except Exception,更有甚者一層套一層,不管有沒有用,先套了再說:

鴻蒙官方戰略合作共建——HarmonyOS技術社區ss="dp-xml">ss="alt">def func(): ss="">    try: ss="alt">        "函數內部代碼" ss="">    except Exception as e: ss="alt">        print('函數錯誤:', e) ss=""> ss="alt"> ss="">try: ss="alt">    func() ss="">except Exception as e: ss="alt">    print('函數錯誤:', e)

根本不管是否有必要,總之套上了try...except...就有了安全感。

俄羅斯套娃套多了以后,噩夢開始了。我們來看看下面這段報錯:

Python中怎么避免濫用try...except

你倒是給我說說,是哪個函數出了問題?

如果你飽受濫用try...except...之苦,下面三個方法可以讓你脫離苦海。

把問題暴露出來

在程序開發的初期,不要用try...except...。讓 Python 把問題暴露出來。通過 Python  的報錯,你可以直接看到是哪一行代碼有問題,具體是什么問題。

甚至有時候,不僅不需要捕獲異常,你還應該主動拋出異常。在項目完成以后,如果你做的是一個第三方庫,是用來給別人調用的,那么,你應該多拋出異常,而不是擅自返回一個普通的錯誤信息。

例如,你要實現一個函數:query_name,傳入參數是數字 id,輸出用戶名。你可能會這樣寫:

鴻蒙官方戰略合作共建——HarmonyOS技術社區ss="dp-xml">ss="alt">def query_name(user_id): ss="">    if not isinstance(user_id, int): ss="alt">        return {'success': False, 'msg': '用戶 id 必須是整型'} ss="">    ...

但實際上,更好的做法是,直接拋出一個異常:

鴻蒙官方戰略合作共建——HarmonyOS技術社區ss="dp-xml">ss="alt">def query_name(user_id): ss="">    if not isinstance(user_id, int): ss="alt">        raise Exception('用戶 id 必須是整型'} ss="">    ...

甚至在某些情況下,你可以使用 Python 的斷言:

鴻蒙官方戰略合作共建——HarmonyOS技術社區ss="dp-xml">ss="alt">def query_name(user_id): ss="">    assert isinstance(user_id, int), '用戶 id 必須是整型' ss="alt">    ...

如下圖所示:

Python中怎么避免濫用try...except

只要 user_id不是整型,就拋出AssertionError。

我們直接執行python3 xxx.py時,這些斷言語句會正常工作。但我們可以通過python3 -o xxx.py來讓所有assert  xxx語句失效。

盡量早地讓異常暴露出來,才能更早地解決問題。

捕獲具體異常而不是所有異常

只捕獲你明確知道的異常。這些異常你知道它為什么會出現,并且你知道應該怎么解決它。

例如,我們使用requests請求網站,由于網絡問題,有時候可能會請求超時。一旦超時 requests 就會拋出超時異常,如下圖所示:

Python中怎么避免濫用try...except

這種情況下,你知道這個地方可能會出現Timeout異常,并且你知道出現的時候,重試就可以了。于是,你可以捕獲這個異常:

Python中怎么避免濫用try...except

大家注意,在這個地方,requests 執行了.json()方法。如果URL 返回的內容可能不是 JSON  格式的字符串,這里就會報JSONDecodeError,如下圖所示:

Python中怎么避免濫用try...except

如果你不做區分,一股腦直接用 except  Exception,那么你怎么知道,到底是你能夠正常處理的超時問題,還是你不能正常處理的網站內容返回異常?

所以,只捕獲你知道它為什么會發生并且你知道如何處理的異常。對于你無法預料的或者無法處理的異常,直接拋出。不要擅自捕獲。

強行打印報錯信息

如果實在是萬不得已,你必須用try...except Exception,如何把具體報錯的位置打印出來呢?其實也是有方法的。那就是使用  Python 自帶的traceback模塊。

它的用法非常簡單:

鴻蒙官方戰略合作共建——HarmonyOS技術社區ss="dp-xml">ss="alt">import traceback ss=""> ss="alt">try: ss="">    1 + 'a' ss="alt">except Exception: ss="">    print(traceback.format_exc())

運行效果如下圖所示:

Python中怎么避免濫用try...except

成功把異常所在的行數和具體的錯誤類型打印了出來。顯然,這樣寫你需要平白無故多寫很多代碼。

感謝各位的閱讀,以上就是“Python中怎么避免濫用try...except”的內容了,經過本文的學習后,相信大家對Python中怎么避免濫用try...except這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐都县| 莫力| 黑龙江省| 罗山县| 永和县| 乌什县| 天长市| 上饶县| 勐海县| 和顺县| 舞钢市| 扶风县| 鸡东县| 南漳县| 阿克陶县| 铜山县| 邹城市| 德令哈市| 东丽区| 谷城县| 乐陵市| 蓬莱市| 梅河口市| 丰宁| 和政县| 安顺市| 获嘉县| 田东县| 安福县| 徐州市| 沾益县| 南丰县| 关岭| 桂林市| 潜山县| 连南| 宣城市| 马龙县| 怀安县| 城口县| 青河县|