異常處理及其相關知識點

派森马發表於2024-08-04

寫程式碼的時候,對於那些不確定會報什麼錯誤或者說感覺可能會報錯的地方,才會用到異常處理。但是切記,一般情況下不要用,畢竟這玩意影響程式碼的可讀性,畢竟是你寫程式碼的時候附加的邏輯。

正本清源
很多人以為只有try .. except這種程式碼邏輯才是異常處理,我只能說大傻逼,懂個錘子。
難道if .. elif .. else這種形式就不是異常處理了???啊?回答我。

言歸正傳,其實if和except兩種方式都可以,只不過建議用except,因為更簡潔。

直接上程式碼:
try:
    num=input('請輸入一個數字:')
    int(num)
except ValueError as e:
    print(e)
輸出:
D:\python_s3\pythonProject\pythonProject\.venv\Scripts\python.exe D:\python_s3\pythonProject\pythonProject\day29\test.py 
請輸入一個數字:dlja
invalid literal for int() with base 10: 'dlja'

Process finished with exit code 0

上面的程式碼還可以改成多分支的情況:

try:
    num=input('請輸入一個數字:')
    int(num) #主函式
except ValueError as e:
    print(e)
except KeyError as e:
    print(e)
#下面這條是萬能語句,意思是上面那兩個except都對應不上,直接找Exception。也可以直接用Exception
except Exception as e:
    print(e)
#下面的else和if..else中的else完全是兩個概念,這裡的else是指當try中的內容沒有報錯時執行else的內容。
else:
    print('當主函式沒有報錯時執行')
finally:
    print('不管主函式有沒有報錯,這條語句都會執行')

其實異常處理的內容一般情況下也不使用,會用就行了。
接下來,再教給你們一個高階玩法,自定義一個異常,看好了。

class MyExcept(BaseException):
    def __init__(self,msg):
        self.msg=msg

raise MyExcept('自制的異常型別')
輸出結果:
Traceback (most recent call last):
  File "D:\python_s3\pythonProject\pythonProject\day29\test.py", line 5, in <module>
    raise MyExcept('自制的異常型別')
__main__.MyExcept: 自制的異常型別

關於異常處理的部分就講到這裡。

相關文章