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

歡迎訪問 生活随笔!

生活随笔

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

python

【Python】Python错误、异常和模块(长文系列第4篇)

發布時間:2025/3/12 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】Python错误、异常和模块(长文系列第4篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系列第四篇主要講兩方面,錯誤和異常以及模塊。在編程時遇見錯誤信息在所難免,Python中會也有很多種錯誤信息,常見的兩種就是語法錯誤和邏輯錯誤,邏輯錯誤的種類有很多,占據了異常中大部分位置,下面就開始介紹一下這兩個概念的相關知識。

錯誤和異常

語法錯誤

語法錯誤英文表示為SyntaxError,后面會跟著一些關于錯誤的解釋信息,方便你查找語句中的bug,如下:

In?[5]:?print('naitangmao)File?"<ipython-input-5-d5b793a8884b>",?line?1print('naitangmao)^ SyntaxError:?EOL?while?scanning?string?literal

語法錯誤顧名思義就是你的代碼語句寫錯了,比如上面這個語句的錯誤就是少了一個引號。發生錯誤后,解釋器會給出文件的名字和錯誤行號,以及在錯誤行下面有一個"^",這個提示你代碼出錯的位置,一般會位于箭頭前面,這些提示會便于編寫者盡快找出錯誤。

異常

有的時候一行代碼在語法上可能沒有什么錯誤,但是執行的時候解釋器也會報紅,這種錯誤信息可以稱為異常,和語法錯誤相比,異常的種類更多也更加常見。

舉兩個簡單的例子:

In?[6]:?print(1/0) --------------------------------------------------------------------------- ZeroDivisionError?????????????????????????Traceback?(most?recent?call?last) <ipython-input-6-2fc232d1511a>?in?<module> ---->?1?print(1/0)ZeroDivisionError:?division?by?zero

都知道0是不能作為分母出現的,所以Python就會給出一個ZeroDivisionError,并提醒你這是一個零除錯誤。

In?[9]:?1+'1' --------------------------------------------------------------------------- TypeError?????????????????????????????????Traceback?(most?recent?call?last) <ipython-input-9-d3bd1e37a107>?in?<module> ---->?1?1+'1'TypeError:?unsupported?operand?type(s)?for?+:?'int'?and?'str'

整形與字符串之間不存在加法運算,解釋器分析出后會給出一個TypeError,這是一個類型錯誤,并且在后面給出錯誤的解釋。

異常處理

對于Python解釋器而言,如果一段程序中某個部分出現了異常,那么其后面的代碼將不會被運行,但Python中有方法可以對異常進行處理,讓異常不報紅,進而幫助整個程序完成運行,這種行為稱作捕獲異常,以try ... except語句組合實現。

In?[11]:?a?=?1;b?=?'2' In?[12]:?try:...:?????print(a+b)...:?except?TypeError:...:?????print('類型錯誤!') 類型錯誤!

捕獲異常實現的過程:

  • 1.執行try和except關鍵字之間的部分

  • 2.如果沒有異常發生,except子句在try語句執行完畢后就被忽略了。

  • 3.如果在 try 子句執行過程中發生了異常,那么該子句其余的部分就會被忽略。如果異常匹配于except關鍵字后面指定的異常類型,就執行對應的except子句。然后繼續執行try/except語句之后的代碼。

  • 4.如果發生了一個異常,在except子句中沒有與之匹配的分支,它就會傳遞到上一級try語句中。如果最終仍找不到對應的處理語句,它就成為一個未處理異常,終止程序運行,顯示提示信息。

為了避免第4條情況產生,在except語句中可以使用所有異常的父類Exception,這樣就囊括了所有異??赡馨l生的狀況:

In?[15]:?try:...:?????print(a+b)...:?except?Exception?as?e:...:?????print(e) unsupported?operand?type(s)?for?+:?'int'?and?'str'

拋出異常

利用raise語句可以主動拋出一個異常,但拋出的異常必須是要繼承于Exception的異常類或者異常示例。

In?[16]:?raise?NameError('naitangmao') --------------------------------------------------------------------------- NameError?????????????????????????????????Traceback?(most?recent?call?last) <ipython-input-16-b751158801b2>?in?<module> ---->?1?raise?NameError('naitangmao')NameError:?naitangmao

除此上面介紹之外,用戶還可以根據自己的需求自己定義異常,不再過多介紹,建議掌握的部分是每種異常出現的原因以及異常處理的方法。

模塊

第二部分就是模塊,我們有時可能會在不同文件之間利用同一個函數,笨一點的做法就是copy來copy去,Python提供了一個機制可以在將一個文件中的內容導入另一個文件中使用,這樣的文件就可以稱為模塊,需要注意的是并不是任何一個文件都可以當做模塊,而必須是包含Python定義和聲明的文件。

舉一個簡單的小例子幫助理解上面這段話,首先可以創建一個odd_num.py文件,然后這個文件中只有一個函數,功能是實現過濾掉一個范圍內的偶數:

In?[18]:?def?odd(n):...:?????result?=?[]...:?????for?i?in?range(n):...:?????????if?i?%?2?!=?0:...:?????????????result.append(i)...:?????return?result

然后我們可以在另一個文件中導入這個模塊,如果我們想使用這個函數的話,就可以通過模塊名.函數名的方法調用該函數,如下:

In?[20]:?import?odd_num In?[21]:?odd_num.odd(20) Out[21]:?[1,?3,?5,?7,?9,?11,?13,?15,?17,?19]

如果你只想用一個模塊中的某個子模塊,那么在導入時就可以指明需要導入的部分,這樣子模塊就可以單獨使用,不必在以模塊名.函數名的形式:

In?[22]:?from?odd_num?import?odd In?[23]:?odd(20) Out[23]:?[1,?3,?5,?7,?9,?11,?13,?15,?17,?19]

如果你還想偷懶的話,可以利用'*'的形式導入,這種寫法是導入一個模塊中的所有子模塊:

In?[24]:?from?odd_num?import?*

這種方法往往是不被推薦的,因為會讓代碼的可讀性變差。

如果你有很多自定義的模塊,為了更加規范、易找,那么你就可以將這些模塊存入一個"包"中,需要注意的是,這個包中比如要有一個名為__init__.py的文件,這個文件可以為空但必須存在,然后導入包中模塊的方式就是包名.模塊名。

Python本身也有自帶的模塊庫,有一部分模塊是內置于解釋器之中,然后用戶可以直接訪問這類模塊的接口,很大程度上提高了效率,比如time、sys等等。如果你對于一個模塊比較陌生,你可以利用dir()函數搜索某個模塊的定義,返回的結果是一個列表,其中包括模塊內的方法、可供調用的接口等等。

In?[24]:dir(time) Out[24]:['_STRUCT_TM_ITEMS',?'__doc__',?'__loader__','__name__','__package__','__spec__','altzone','asctime','ctime','daylight', 'get_clock_info','gmtime','localtime','mktime','monotonic','monotonic_ns','perf_counter','perf_counter_ns','process_time', 'process_time_ns','sleep','strftime','strptime','struct_time','thread_time','thread_time_ns','time','time_ns','timezone','tzname']

綜上是對錯誤和異常、模塊兩方面常用知識的一些概括,如果你對更高階的使用感興趣可以查找Python的官方文檔,里面會有更加詳細的介紹。

往期精彩回顧適合初學者入門人工智能的路線及資料下載(圖文+視頻)機器學習入門系列下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印《統計學習方法》的代碼復現專輯 AI基礎下載機器學習交流qq群955171419,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【Python】Python错误、异常和模块(长文系列第4篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

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