使用Python處理專業錯誤
在本教程中,您將從整個系統的角度學習如何處理Python中的錯誤條件。錯誤處理是設計的關鍵方面,它從最低級別(有時是硬件)一直到最終用戶。如果您沒有一致的策略,您的系統將不可靠,用戶體驗將很差,您將面臨很多挑戰,並且要調試和故障排除。狀態代碼和異常。狀態代碼可以由任何編程語言使用。異常需要語言/運行時支持。
python支持異常。 Python及其標準圖書館使用例外情況,可以自由地報告許多特殊情況,例如IO錯誤,除以零,不超出界限,以及一些不太特殊的情況,例如迭代的終結(儘管隱藏了)。大多數庫都遵循並提出例外。 這意味著您的代碼無論如何都必須處理Python和庫提出的例外,因此您不妨在必要時從代碼中提出異常,而不是依賴狀態代碼。>
快速示例>
>>
這是調用try
子句時的輸出。如果沒有例外,則該程序會跳過def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br>
>如果輸入一個整數,則程序可以按預期工作。但是,如果您輸入浮子或字符串,則程序將停止執行。
當您捕獲異常時,您有三個選項:Please enter a number: 10.3<br>Oops! That was no valid number. Try again...<br>Please enter a number: hello<br>Oops! That was no valid number. Try again...<br>Please enter a number: 10.0<br>Oops! That was no valid number. Try again...<br>Please enter a number: <br>
- >
- 悄悄地吞下它(靜靜地處理並繼續運行)。
>吞嚥異常
import json<br>import yaml<br><br>def parse_file(filename):<br> try:<br> return json.load(open(filename))<br> except json.JSONDecodeError<br> return yaml.load(open(filename))<br>
>請注意,其他例外(例如未找到或未讀取權限的文件)將傳播,並且不會被特定條款捕獲。在這種情況下,這是一個很好的策略,您只需要在JSON解析因JSON編碼問題而失敗的情況下嘗試YAML解析。 >如果要處理except Exception
>
<code> <code> <code> dececkion excect 。例如:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br></pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>><p>請注意,通過添加<code>as e
,您可以將異常對象綁定到您的名稱e
>的name>。這使您可以執行一些本地處理,但仍然可以讓高層處理。在這裡,函數打印了控制台的異常類型,然後再次提高異常。
raise
>提出不同的異常invoke_function()
Please enter a number: 10.3<br>Oops! That was no valid number. Try again...<br>Please enter a number: hello<br>Oops! That was no valid number. Try again...<br>Please enter a number: 10.0<br>Oops! That was no valid number. Try again...<br>Please enter a number: <br>
如果
函數提出了異常,則對import json<br>import yaml<br><br>def parse_file(filename):<br> try:<br> return json.load(open(filename))<br> except json.JSONDecodeError<br> return yaml.load(open(filename))<br>
query()
close_db_connection()
> finally
的調用可能不會返回連接或提出異常本身。在這種情況下,無需關閉DB連接。
def print_exception_type(func, *args, **kwargs):<br> try:<br> return func(*args, **kwargs)<br> except Exception as e:<br> print(type(e))<br>
>,您必須注意不要在那裡引起任何例外,因為它們會掩蓋原始異常。 open_db_connection()
>
finally
with
def invoke_function(func, *args, **kwargs):<br> try:<br> return func(*args, **kwargs)<br> except Exception as e:<br> print(type(e))<br> raise<br>
上下文管理者在清理代碼中包裝其他機制,即使在清理代碼中均已自動執行。您使用的是process()
>語句,而不是嘗試封鎖。這是一個具有文件的示例:即使with
提出了例外,當退出
提出了例外,無論是否處理過例外,該文件都將立即正確關閉。它在Web應用程序中特別有用,在Web應用程序中,您可以以通用的方式對待所有異常:只需記錄異常,然後將錯誤消息返回給呼叫者。
在記錄時,記錄異常類型,錯誤消息和stacktrace是很有用的。所有這些信息都可以通過
>對象獲得,但是如果您在異常處理程序中使用方法,則Python記錄系統將為您提取所有相關信息。
>這是我建議的最佳實踐:
def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br>
>如果您遵循此模式(假設您是否正確設置記錄),那麼無論發生什麼情況,您都會在日誌中獲得不錯的記錄,並且可以解決該問題。這是一種浪費,它可能會使您感到困惑,並讓您認為同一問題的多個實例發生了多次記錄的一個實例。
>>最簡單的方法是讓所有例外的方式讓所有異常傳播(除非可以自信地吞嚥和吞嚥),然後將其登錄到您的應用程序/系統/系統的最高級別。功能。最常見的實現是使用日誌文件。但是,對於具有數百,數千或更多服務器的大型分佈式系統,這並不總是最好的解決方案。
跟踪整個基礎架構中的異常,諸如Sentry之類的服務非常有用。它集中了所有異常報告,除了堆疊式添加每個堆棧框架的狀態之外(在提高異常時變量的值)。它還提供了一個非常不錯的界面,其中包含儀表板,報告和方法來通過多個項目分解消息的方法。它是開源的,因此您可以運行自己的服務器或訂閱託管版本。下面是屏幕截圖,是一個屏幕截圖,顯示Sentry如何顯示Python應用程序中的錯誤。
>,這是文件的詳細堆棧跟踪,導致錯誤。在問題的第一個跡象的系統中,嚇壞了的系統不是很有用。

>兩個可以幫助解決錯誤處理的裝飾器的是
>,它會
,它會再次登錄例外,然後再提高它,然後將其重新調用,該裝飾器將重新調用功能幾次。
>錯誤記錄器
這是一個簡單的實現。裝飾器除了登錄對象。當它裝飾功能並調用函數時,它將在一個try-except子句中包裝呼叫,如果有例外,它將記錄下來並最終提高異常。
def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br>
Please enter a number: 10.3<br>Oops! That was no valid number. Try again...<br>Please enter a number: hello<br>Oops! That was no valid number. Try again...<br>Please enter a number: 10.0<br>Oops! That was no valid number. Try again...<br>Please enter a number: <br>
>
import json<br>import yaml<br><br>def parse_file(filename):<br> try:<br> return json.load(open(filename))<br> except json.JSONDecodeError<br> return yaml.load(open(filename))<br>
retier >結論錯誤處理對用戶和開發人員都至關重要。 Python在語言和標準庫中為基於異常的錯誤處理提供了很好的支持。通過勤奮地遵循最佳實踐,您可以征服這一經常被忽視的方面。 >已通過Esther Vaati的貢獻進行了更新。 Esther是Envato Tuts的軟件開發人員和作者。
以上是使用Python處理專業錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。
