條件語句中的 else
我們都寫過條件語句,並且可能至少使用過一次完整的 if-elif-else 結構。
例如,為所需的瀏覽器建立 Web 驅動程式實例時:
browser = get_browser() if browser == 'chrome': driver = Chrome() elif browser == 'firefox': driver = Firefox() else: raise ValueError('Browser not supported')
此程式碼段支援使用 Chrome 和 Firefox 進行測試,如果提供不支援的瀏覽器,則會引發異常。
一個鮮為人知的事實是,Python 支援將 else 子句與循環和異常處理結合使用。
Else 帶循環
假設我們有一個單字列表,我們想要列印它們,只要它們以大寫字母開頭。最後,我們要檢查是否所有單字都已處理,如果是,則執行特定邏輯。
我們可以使用標誌變數 is_all_words_processed,如果遇到無效單詞,則將其設為 False,然後在循環外檢查它以執行邏輯。
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] is_all_words_processed = True for season in seasons: if not season.istitle(): is_all_words_processed = False break print(season) if is_all_words_processed: print('All seasons were processed')
Python 讓我們透過將所有單字都有效時的邏輯放入 else 子句中來避免附加變數:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] for season in seasons: if not season.istitle(): break print(season) else: print('All seasons were processed')
只有當迴圈自然完成且沒有中斷時,else 區塊才會執行。如果循環被break中斷,則else子句將不會運行。
這是用 while 迴圈重寫的相同範例。對於 while,else 子句的行為方式相同:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] index = 0 while index <h3> 異常處理中的else </h3> <p>else 子句也可以用於異常處理。除了塊之外,它必須在所有之後出現。只有當 try 區塊中沒有引發異常時,else 區塊內的程式碼才會執行。 </p> <p>例如,讓我們讀取一個包含兩列數字的檔案並列印它們的商數。我們需要處理無效的檔案名,而任何其他錯誤(例如,將值轉換為數字或除以零)都會導致程式崩潰(我們不會處理它們)。 <br> </p> <pre class="brush:php;toolbar:false">file_name = 'input.dat' try: f = open(file_name, 'r') except FileNotFoundError: print('Incorrect file name') else: for line in f: a, b = map(int, line.split()) print(a / b) f.close()
在此範例中,try 區塊僅包含可能引發捕獲的異常的程式碼。
官方文件建議使用 else 區塊來避免無意中捕獲 try 區塊之外的程式碼引發的異常。儘管如此,在異常處理中使用 else 可能感覺並不直觀。
將 Else 與循環和異常處理結合
這是我在訪談中提出的問題。
假設我們有一個帶有 find_element 方法的 Driver 類別。 find_element 方法要麼傳回一個元素,要麼引發 ElementNotFoundException 異常。在此範例中,它的實作是隨機傳回一個元素或以相等的機率引發異常。
使用基本的 Python 語法,實作一個方法 smart_wait(self, locator: str, timeout: float, step: float),該方法每步秒檢查具有給定定位器的元素。如果在逾時秒內找到該元素,則傳回;否則,引發 ElementNotFoundException 異常。
browser = get_browser() if browser == 'chrome': driver = Chrome() elif browser == 'firefox': driver = Firefox() else: raise ValueError('Browser not supported')
這是實作此方法的一種方法:
- 只要超時未到,就會嘗試找出元素。
- 如果找到該元素,則退出循環。
- 如果沒有找到元素,則等待步長間隔。
- 如果超過逾時,則引發 ElementNotFoundException。 這是一個簡單的實作:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] is_all_words_processed = True for season in seasons: if not season.istitle(): is_all_words_processed = False break print(season) if is_all_words_processed: print('All seasons were processed')
我們可以透過使用 return 而不是 break 來稍微縮短邏輯,但現在讓我們將其保留為 i 。
其實這個方法是在Selenium的WebDriverWait類別中實現的-until方法:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] for season in seasons: if not season.istitle(): break print(season) else: print('All seasons were processed')
現在,讓我們使用 else 重寫此方法以進行異常處理和循環:
- 異常只能在 self.find_element(locator) 行中引發。如果未引發異常,則應執行退出循環。所以我們可以將break移動到else塊。
- 如果循環不是因為中斷而退出,我們的方法應該會引發異常。因此我們可以將異常引發移至迴圈的 else 子句。
- 如果您依序執行轉換 1 和 2,您會發現當前時間只能在循環條件下取得。
完成這些轉換後,我們得到了一個使用 else 語句進行異常處理和循環的方法:
seasons = ['Winter', 'Spring', 'Summer', 'Autumn'] index = 0 while index <hr> <p>我能說什麼...這是 Python 鮮為人知的功能之一。不頻繁使用可能會使其在每種情況下使用起來不太直觀——這可能會導致混亂。然而,了解它並在需要時有效地應用它無疑是值得的。 </p> <p><strong>新年快樂! </strong>???</p> <p>P.S.真的很可怕嗎? :<br> 我自己寫文章,但使用 ChatGPT 來翻譯它們。為了翻譯,我刪除了所有程式碼片段,但 ChatGPT 恢復了所有程式碼片段? </p>
以上是Python 中奇怪的else的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

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

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。