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('你的輸入有誤,請重新輸入!')