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

歡迎訪問 生活随笔!

生活随笔

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

python

Python运行环境与异常处理

發布時間:2025/3/8 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python运行环境与异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python的命令格式:

python?[option]?...?[-c?cmd?|?-m?mod?|?file?|?-]?[arg]?...
選項描述
-J

啟動將從Python3中刪除或更改某些功能的警告

-B
阻止在導入時創建.pyc或.pyo文件
-E忽略環境變量
-h
打印所有可用命令行選項的列表
-i
在程序執行后進入交互模式
-m module以腳本的形式運行庫模塊module
-O
優化模式
-OO
優化模式,在創建.pyo文件時刪除文檔字符串
-Q arg

指定Pyhthon2中除法運算符的行為,值為-Qold (默認), -Qwarn, -Qwarnall,?

-Qnew之一

-s
阻止將用戶站點目錄追加到sys.path
-S
阻止包含site初始模塊
-t
報告關于不一致的標簽使用警告
-tt
由于不一致的標簽使用而導致TabError異常
-u
未緩沖的二進制stdout和stdin
-U
Unicode字面量,所有字符串字面量都以Unicode形式處理(僅在Python2中使用)
-v
詳細模式,跟蹤導入語句

-V

打印版本信息
-x
跳過源程序的第一行
-c cmd
以字符串形式執行cmd

2、doctest代碼測試模塊

? Doctest模塊允許在文檔字符串內嵌入注釋以顯示各種語句的期望行為,尤其是函數和方法的結構;此處的文檔字符串看起來如同一個交互式shell會話;可用于測試文檔是否與主程序保持同步,或基于文檔對程序本身做測試。

?自定義測試模塊test.py:

[root@mylinux?home]#?cat?test.py? #!/usr/bin/python3 def?add(num1,num2):'''>>>?add(12,23)?????#??'>>>'之后需要有一空格35'''return?num1+num2

? 使用doctest模塊進行測試:

In?[1]:?import?test In?[2]:?import?doctest In?[3]:?doctest.testmod(test)??????????????#測試test.py模塊 Out[3]:?TestResults(failed=0,?attempted=1) In?[4]:?doctest.testmod(test,verbose=True) Trying:add(12,23) Expecting:35 ok 1?items?had?no?tests:test 1?items?passed?all?tests:1?tests?in?test.add 1?tests?in?2?items. 1?passed?and?0?failed. Test?passed. Out[4]:?TestResults(failed=0,?attempted=1)

? 也可以直接定義自測試模塊:

[root@mylinux?home]#?cat?test.py? #!/usr/bin/python3 def?add(num1,num2):'''>>>?add(12,23)35'''return?num1+num2 if?__name__?==?'__main__':import?doctestdoctest.testmod() [root@mylinux?home]#?python3?test.py?????#測試通過時不會顯示任何信息 [root@mylinux?home]#?python3?test.py?-v??#輸出詳細信息 Trying:add(12,23) Expecting:35 ok 1?items?had?no?tests:__main__ 1?items?passed?all?tests:1?tests?in?__main__.add 1?tests?in?2?items. 1?passed?and?0?failed. Test?passed.

3、Python的異常處理

? 在一些編程語言中,錯誤是通過特殊的函數返回值指出的,而Python使用異常,它是只有錯誤發生時執行的代碼。錯誤通常有:語法錯誤和邏輯錯誤兩大類。

?語法錯誤:軟件的結構上有錯誤而導致不能被解釋器解釋或不能被編譯器編譯。

?邏輯錯誤:由于不完整或不合法的輸入所致,也可能是邏輯無法生成、計算或者輸出結果需要的

過程無法執行等。

? 在Python中異常是一個對象,表示錯誤或意外,檢測到一個錯誤時,將觸發異常。Python可以通過異常傳導機制傳遞一個異常對象,發出一個異常情況出現的信號;程序員也可以在代碼中手動觸發異常。Python異常可以理解為:程序員出現了錯誤而在正常控制流以外采取的行為。這種處理可以分為兩個階段。

? ? 第一階段:解釋器觸發異常,此時當前程序流被打斷;

? ? 第二階段:異常處理,如忽略非致命性錯誤、減輕錯誤帶來的影響等。

? 這種處理方式的主要作用有:

錯誤處理:默認處理,停止程序,打印錯誤信息;使用try語句處理異常并恢復

事件通知:用于發出有效狀態信息

特殊情況處理:無法調整代碼去處理的現場

終止行為:try/finally語句可確保執行必須的結束處理機制

非常規控制流程:異常是一種高級跳轉(goto)機制

  • 異常的檢測與處理

? 在Python中,異常通過try語句來檢測,任何在try語句塊里的代碼都會被監測,檢查有無異常。在本文中使用的是Python3作為演示。

? try語句的主要有兩種形式:

try-except:檢測和處理異常。可以有多個except,支持使用else子句處理沒有探測異常的執行代碼

try-finally:僅檢測異常并做一些必要的清理工作。僅能有一個finally。

try語句的復合形式:try-except-finally。

try-except語句:

try:try_suite except?Exception?[as?reason]:except_suiteIn?[1]:?try:...:?????f1=open('/tmp/a.txt','r')...:?except?IOError?as?e:...:?????print('Could?nor?open?file',e)...:????? Could?nor?open?file?[Errno?2]?No?such?file?or?directory:?'/tmp/a.txt'

try-except-else語句:

? except分句個數沒有限制,但else只能有一個;沒有異常發生時,else分句才會執行;沒有符合的except分句時,異常會向上傳遞到程序中的之前進入的try中或者道程序的頂層。

try:try_suite except?Exception1?[as?reason]:suite_exception1 except?(Exception1,?Exception2?,Exception3?...)[,?reason]:suite... except:suite else:else_suite

try-finally語句:

? 無論異常是否發生,finally子句都會執行;常用于定義必須進行的清理工作,如關閉文件或斷開服務連接等;finally中的所有代碼執行完后會繼續向上一層引發異常。

try:try_suite finally:finally_suite

try-except-else-finally語句:

try:try_suite except?Exception1:suite_exception1 except?(Exception1,?Exception2?,):suite23 ... else:else_suite finally:finally_suite
分句形式說明
except:
捕捉所有(其他)異常類型
except name [as e]:
只捕捉特定的異常
except (name1,name2):
捕捉所列出的異常

else:

如果沒有異常就運行
finally:
總是運行此代碼塊

4、自定義異常

?raise語句允許程序員強制拋出一個指定的異常。其語法格式為:

raise[someexception?[?,arg?[,?traceback]]]

? someexception:異常的名字,僅能使用字符串、類或實例;

? args:以元組的形式傳遞給異常的參數;

? traceback:異常出發時新生成的一個用于異常-正常化的跟蹤記錄,多用于重新引發異常。

In?[9]:?try:...:?????raise?NameError('HiThere')?????#定義異常...:?except?NameError:...:?????print('An?except?flew?by!')...:?????raise??????????????????????????#觸發異常...:? An?except?flew?by! -------------------------------------------------------------------------- NameError????????????????????????????????Traceback?(most?recent?call?last) <ipython-input-9-9448df11d518>?in?<module>()1?try: ---->?2?????raise?NameError('HiThere')3?except?NameError:4?????print('An?except?flew?by!')5?????raise NameError:?HiThere

? 大多數的標準異常都是由StandError派生的,其中有3個抽象的子類:

ArithmeticError

由于算術錯誤引發的異常基類

OverflowErrorZeroDivisionErrorFloatingPointError

LookupError

容器在接收到一個無效鍵或索引時引發異常

IndexErrorKeyError

EnvironmentError

由于外部原因而導致的異常的基類

IOErrorOSErrorWindowsError

自定義異常類:

? 自定義異常類通常分為兩大類:

自定義異常和多重繼承:從定義異常類和標準異常類進行多重繼承,例如:

? class customAttributeError(CustomException,AttributeError):

? pass

標準庫中使用的其它異常:如ArithmeticError、EnvironmentError等

assert語句通常用于在程序中引用調試代碼,語法格式為:

assert??condition?[,?expression]

? 如果condition條件滿足,則assert不做任何操作;如果條件不滿足,則assert作為參數實例化AssertionError并引發結果實例。

? 如果運行python時使用了-O優化選項,assert將是一個空操作,編譯器不為assert語句生成代碼 。運行python不使用-O選項,則__debug__內置變量為True,否則為False。

? assert語句相當于下面代碼:

if??__debug__:if?not?condition?:raise??AssertionError,?<expression> In?[17]:?assert?len(['my?boy',12])>10????#條件len(['my?boy',12])>10不滿足依法默認異常 -------------------------------------------------------------------------- AssertionError???????????????????????????Traceback?(most?recent?call?last) <ipython-input-17-cc0a09de885b>?in?<module>() ---->?1?assert?len(['my?boy',12])>10 AssertionError:? In?[18]:?assert?range(4)==[0,1,2,3]??????#條件range(4)==[0,1,2,3]不滿足依法默認異常 -------------------------------------------------------------------------- AssertionError???????????????????????????Traceback?(most?recent?call?last) <ipython-input-18-8b7aafe34e9e>?in?<module>() ---->?1?assert?range(4)==[0,1,2,3] AssertionError:? In?[19]:?assert?1==1????????????????????????#條件滿足,無輸出 In?[20]:?assert?range(4)==[0,1,2,3],IOError?#條件不滿足,自定義異常為IOError -------------------------------------------------------------------------- AssertionError???????????????????????????Traceback?(most?recent?call?last) <ipython-input-20-49011133d0d8>?in?<module>() ---->?1?assert?range(4)==[0,1,2,3],IOErrorAssertionError:?<class?'OSError'>

本文轉自 夢想成大牛 51CTO博客,原文鏈接:http://blog.51cto.com/yinsuifeng/1922560,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的Python运行环境与异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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