日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3错误和异常

發布時間:2025/3/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3错误和异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 、Python3 錯誤和異常

?? ? ?? ??? ?Python有兩種錯誤很容易辨認:語法錯誤和異常。
  • 語法錯誤
    • Python 的語法錯誤或者稱之為解析錯,是新手經常碰到的。
  • 異常
    • 語法是正確的,在運行它的時候,也有可能發生錯誤。運行期檢測到的錯誤被稱為異常 。大多數的異常都不會被程序處理,都以錯誤信息的形式展現出來。
  • 異常處理 ? 這里主要講一下 ?try ?- - - except - - - ?語 句?
    • 如下面一個 demo :?讓用戶輸入一個合法的整數,但是允許用戶中斷這個程序(使用 Control-C 或者操作系統提供的方法)。用戶中斷的信息會引發一個 KeyboardInterrupt 異常。

>>> while True: ????????try: ????????????x = int(input("Please enter a number: ")) ????????????break ????????except ValueError: ????????????print("Oops!??That was no valid number.??Try again???")
  • try語句的工作方式
    • 首先,執行try子句(在關鍵字try和關鍵字except之間的語句)
    • 如果沒有異常發生,忽略except子句,try子句執行后結束。
    • 如果在執行try子句的過程中發生了異常,那么try子句余下的部分將被忽略。如果異常的類型和 except 之后的名稱相符,那么對應的except子句將被執行。最后執行 try 語句之后的代碼。
    • 如果一個異常沒有與任何的except匹配,那么這個異常將會傳遞給上層的try中。
  • 注:?一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有一個分支會被執行。處理程序將只針對對應的try子句中的異常進行處理,而不是其他的 try 的處理程序中的異常。
  • 一個except子句可以同時處理多個異常,這些異常將被放在一個括號里成為一個元組 。

except ( RuntimeError, TypeError, NameError ): ?? ??? ?pass
  • 最后一個except子句可以忽略異常的名稱,它將被當作通配符使用。你可以使用這種方法打印一個錯誤信息,然后再次把異常拋出。

import sys try: ????f = open('myfile.txt') ????s = f.readline() ????i = int(s.strip()) except OSError as err: ????print("OS error: {0}".format(err)) except ValueError: ????print("Could not convert data to an integer.") except: ????print("Unexpected error:", sys.exc_info()[0]) ????raise
  • try ?except 語句還有一個可選的else子句,如果使用這個子句,那么必須放在所有的except子句之后。這個子句將在try子句沒有發生任何異常的時候執行。

for arg in sys.argv[1:]: ????try: ????????f = open(arg, 'r') ????except IOError: ????????print('cannot open', arg) ????else: ????????print(arg, 'has', len(f.readlines()), 'lines') ????????f.close()
  • 使用 else 子句比把所有的語句都放在 try 子句里面要好,這樣可以避免一些意想不到的、而except又沒有捕獲的異常。異常處理并不僅僅處理那些直接發生在try子句中的異常,而且還能處理子句中調用的函數(甚至間接調用的函數)里拋出的異常。

>>> def this_fails(): ????????x = 1/0 ??? >>> try: ????????this_fails() ????except ZeroDivisionError as err: ????????print('Handling run-time error:', err) ??? Handling run-time error: int division or modulo by zero

二 、拋出異常


Python 使用 raise 語句拋出一個指定的異常,raise 唯一的一個參數指定了要被拋出的異常。它必須是一個異常的實例或者是異常的類(也就是 Exception 的子類)。
>>> raise NameError('HiThere') Traceback (most recent call last): File "<stdin>", line 1, in ?
NameError: HiThere
如果你只想知道這是否拋出了一個異常,并不想去處理它,那么一個簡單的 raise 語句就可以再次把它拋出。
>>> try: ????????raise NameError('HiThere') ????except NameError: ????????print('An exception flew by!') ????????raise ??? An exception flew by! Traceback (most recent call last): ??File "<stdin>", line 2, in ? NameError: HiThere

三 、用戶自定義異常


你可以通過創建一個新的exception類來擁有自己的異常。異常應該繼承自 Exception 類,或者直接繼承,或者間接繼承。
>>> class MyError(Exception): ????????def __init__(self, value): ????????????self.value = value ????????def __str__(self): ????????????return repr(self.value) ??? >>> try: ????????raise MyError(2*2) ????except MyError as e: ????????print('My exception occurred, value:', e.value) ??? My exception occurred, value: 4 >>> raise MyError('oops!') Traceback (most recent call last): ??File "<stdin>", line 1, in ? __main__.MyError: 'oops!'
當創建一個模塊有可能拋出多種不同的異常時,一種通常的做法是為這個包建立一個基礎異常類,然后基于這個基礎類為不同的錯誤情況創建不同的子類 。

四 、定義清理行為


? ? ?try 語句還有另外一個可選的子句,它定義了無論在任何情況下都會執行的清理行為。
>>> try: ...?????raise KeyboardInterrupt ... finally: ...?????print('Goodbye, world!') ... Goodbye, world!
Traceback (most recent call last): ??File "<stdin>", line 2, in <module> KeyboardInterrupt
? ? ??以上例子不管 try 子句里面有沒有發生異常,finally 子句都會執行。如果一個異常在 try 子句里(或者在 except 和 else 子句里)被拋出,而又沒有任何的 except 把它截住,那么這個異常會在 finally 子句執行后再次被拋出。

五 、預定義的清理行為


? ? ??一些對象定義了標準的清理行為,無論系統是否成功的使用了它,一旦不需要它了,那么這個標準的清理行為就會執行。 ?? ???對于,使用 for 循環打開文件的語句,若讀取文件過程中發生異常,那么 ,該文件會仍會保持打開狀態 。 那么,此時就需要進行預定義清理, ?? ???使用關鍵詞 with 語句就可以保證諸如文件之類的對象在使用完之后一定會正確的執行他的清理方法 。
with open("myfile.txt") as f: ????for line in f: ????????print(line, end="")
此時,就算在處理過程中出問題了,文件 f 總是會關閉的 。 ?

總結

以上是生活随笔為你收集整理的Python3错误和异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。