Python 【Debug排除程式故障】

来源:https://www.cnblogs.com/CH-TNT/archive/2019/08/10/11332518.html
-Advertisement-
Play Games

debug #排除程式故障 print()函數常和#號註釋結合在一起用來debug 多行註釋有兩種快捷操作:1、在需要註釋的多行代碼塊前後加一組三引號''' 2、選中代碼後使用快捷鍵操作:Windows快捷鍵是ctrl+/,Mac為cmd+/,適用於本地編輯器) 一種異常處理的機制,可以在異常出現時 ...


debug #排除程式故障

print()函數常和#號註釋結合在一起用來debug

多行註釋有兩種快捷操作:
1、在需要註釋的多行代碼塊前後加一組三引號'''
2、選中代碼後使用快捷鍵操作:Windows快捷鍵是ctrl+/,Mac為cmd+/,適用於本地編輯器)

一種異常處理的機制,可以在異常出現時即時捕獲,然後內部消化掉,讓程式繼續運行
try…except…語句

 

Python的所有報錯類型
https://www.runoob.com/python/python-exceptions.html
####################################################################################
總結
針對知識點不熟造成的bug,要記得多複習,查閱筆記,針對性地做練習掌握用法。

針對思維不清的bug,要多用print()函數和#註釋一步步地排查錯誤。

針對容易被忽略的例外情況從而被動掉坑的bug,可以用try...except語句讓程式順利運行。

 

 


###################################################################################
BaseException: 包含所有built-in exceptions
所有內置異常的基類
它不應該被用戶自定義類直接繼承

Exception: 不包含所有的built-in exceptions,
只包含built-in, non-system-exiting exceptions,
像SystemExit類型的exception就不包含在裡面。

所有內置的非系統退出類異常都派生自此類。 所有用戶自定義異常也應當派生自此類

###############################################################################
try...except語句的用法(可帶多個)
try語句工作方式
1.執行try子句(在關鍵字try和關鍵字except之間的語句)

2.如果沒有異常發生,忽略except子句,try子句執行後結束。

3.執行try子句異常,try子句餘下的部分將被忽略
如果異常類型except 之後的名稱相符,那麼對應的except子句將被執行。
最後執行 try 語句之後的代碼。

4.如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中 
##############################################################################
try except 語句還有一個可選的else子句
使用這個子句,那麼必須放在所有的except子句之後。
這個子句將在try子句沒有發生任何異常的時候執行

name = 0
try:
    print(name)
except NameError as a:
    print('------>',a)
else:
    print('在被檢測代碼塊沒有發生異常時執行')

優點:

else 子句比把所有的語句都放在 try 子句裡面要好,
這樣可以避免一些意想不到的、而except又沒有捕獲的異常

try:
  name
except NameError as a: #定製什麼類型的異常 as
  print('------>',a)
#################################################################################
不管 try 子句裡面有沒有發生異常,finally 子句都會執行
如果一個異常在 try 子句里(或者在 except 和 else 子句里)被拋出,
而又沒有任何的 except 把它截住,那麼這個異常會在 finally 子句執行後被拋出。

try:
    d = {}
    d['name']
except Exception as e:
        print('---->', e)
else:
    print('在被檢測代碼塊沒有發生異常時執行')
finally:
    print('不管被檢測的代碼塊有沒有發生異常都會執行')
print('haha')

執行結果:
----> 'name'
不管被檢測的代碼塊有沒有發生異常都會執行
haha
###################################################################

import sys
def main():
    1/0
name = 0
try:
    print(name)
    main()
except NameError as a:
    print('------>',a)
except:                                     #最後一個except子句可以忽略異常的名稱,它將被當作通配符使用
    print('Unexpected error:',sys.exc_info()[0])

 

列子:
print('\n歡迎使用除法計算器!\n')

while True:
    try:
        x = input('請你輸入被除數:')
        y = input('請你輸入除數:')
        z = float(x)/float(y)
        print(x,'/',y,'=',z)
        break  # 預設每次只計算一次,所以在這裡寫了 break。
    except ZeroDivisionError:  # 當除數為0時,跳出提示,重新輸入。
        print('0是不能做除數的!')
    except ValueError:  # 當除數或被除數中有一個無法轉換成浮點數時,跳出提示,重新輸入。
        print('除數和被除數都應該是整值或浮點數!')

 

############################################################################################################################

# 方式2:將兩個(或多個)異常放在一起,只要觸發其中一個,就執行所包含的代碼。
# except(ZeroDivisionError,ValueError):    #except子句可以同時處理多個異常,這些異常將被放在一個括弧里成為一個元組
   #print('你的輸入有誤,請重新輸入!')

# 方式3:常規錯誤的基類,假設不想提供很精細的提示,可以用這個語句響應常規錯誤。
# except Exception:               #except BaseException:
  # print('你的輸入有誤,請重新輸入!')


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先我們先來看看Map集合獲取元素的三種常見方法(1)entrySet(),(2)keySet(),(3)values() 1. entrySet():(1)先返回map集合的所有"映射"的Set集合,這裡規範每個"映射"的類型為Map.Entry<K, V> (2)再通過迭代取出所有的“映射”,再 ...
  • 答案:階梯數為119。 note:該題的答案,只有119,即程式中的 i 的限定值放大至無限大,最終只有當 i = 16,即 x = 7*(16+1) = 119時,才是正確答案。有興趣的同學可以自己親測一下。 ...
  • 點乘和矩陣乘的區別: 1)點乘(即“ \ ”) 各個矩陣對應元素做乘法 若 w 為 m\ 1 的矩陣,x 為 m\ n 的矩陣,那麼通過點乘結果就會得到一個 m\ n 的矩陣。 若 w 為 m\ n 的矩陣,x 為 m\ n 的矩陣,那麼通過點乘結果就會得到一個 m\ n 的矩陣。 w的列數 只能為 ...
  • 題目鏈接 FZU - 2295 Human life 題目分析 題意:你在玩一個游戲,在其中你可以通過學習一些技能,但是學習某些技能之前,可能還要學習一些其他的技能,並且學習任何技能都有一定的花費; 而我們可以通過掌握某些工作以獲取報酬,為了掌握這一工作,我們必須學會特定的技能。 不過有些工作彼此之 ...
  • 時隔一年多,在掌握了Spring、SpringBoot、SpringCloud之後 我再次回頭,重新學習Spring框架 Bean的生命周期學習: 在傳統的XML配置中,可以這樣自定義初始化和銷毀方法: 註解方式的簡單使用: 註意:要有close方法,否則不會列印Car銷毀方法 列印如下: 這裡預設 ...
  • 快速排序:在一組數據中,可以將左邊的數字當作樞軸(右邊也可以),接下來要做的就是,先從右邊找到比樞軸小的數, 再從左邊找到比樞軸大的數,接著將這兩個數進行交換,重覆上述步驟找出所有符合條件的數進行交換, 最後將樞軸放到比樞軸大的數與比樞軸小的數之間。之所以要從右邊開始找,並且找到比樞軸小的數是因為交 ...
  • 原題 | Generating a PEG Parser 作者 | Guido van Rossum(Python之父) 譯者 | 豌豆花下貓(“Python貓”公眾號作者) 聲明 | 本翻譯是出於交流學習的目的,基於 "CC BY NC SA 4.0" 授權協議。為便於閱讀,內容略有改動。 首發地 ...
  • 更新一篇知識星球裡面的源碼分析文章,去年寫的,周末自己錄了個視頻,大家看下效果好嗎?如果好的話,後面補錄發在知識星球裡面的其他源碼解析文章。 前言 之前自己本地 clone 了 Flink 的源碼,編譯過,然後 share 到了 GitHub 上去了,自己也寫了一些源碼的中文註釋,並且 push 到 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...