python3異常例項 Python3 錯誤和異常

2021-10-10 10:51:30 字數 2898 閱讀 3846

錯誤和異常

程式執行時有兩種可以分辨的錯誤: syntax error 和 exception , 按中文來說, 就是語法錯誤和異常。

語法錯誤

語法錯誤也就是解析錯誤,是我們最優可能遇到的錯誤。

while true print("hello world")

file"", line 1, in?while true print("hello world")^syntaxerror: invalid syntax

在這個例子中, 錯誤是在 print() 函式這裡被發現的, 因為在它之前少了乙個冒號 (":"). 檔案的名稱與行號會被列印出來, 以便於你能找到乙個指令碼中導致錯誤的地方。

異常即使語法沒有錯誤,在執行時也會有報錯,這樣的報錯我們叫做異常:大多數異常並不會被程式處理, 不過, 導致錯誤的資訊會被顯示出來。

print(10 * (1/0))

traceback (most recent call last):

file"/users/hadoop/documents/python_workspace/python_3.x/exception.py", line 3, in

print(10 * (1/0))

zerodivisionerror: division by zero

異常處理

try 語句像下面這樣使用.

首先, try clause (在 try 和 except 之間的語句) 將被執行.

如果沒有異常發生, except clause 將被跳過, try 語句就算執行完了.

如果在 try 語句執行時, 出現了乙個異常, 該語句的剩下部分將被跳過. 然後如果它的型別匹配到了 except 後面的異常名, 那麼該異常的語句將被執行, 而執行完後會執行 try 後面的問題.

如果乙個異常發生時並沒有匹配到 except 語句中的異常名, 那麼它就被傳到 try 語句外面; 如果沒有處理, 那麼它就是 unhandled exception 並且將會像前面那樣給出乙個訊息然後執行.

whiletrue:try:

nu= int(input("please input a number:"))break

exceptvalueerror:print("valid number!")

please input a number:a

valid number!

please input a number:a

valid number!

please input a number:1

乙個 try 語句可以有多於一條的 except 語句, 用以指定不同的異常. 但至多只有乙個會被執行. handler 僅僅處理在相應 try 語句中的異常, 而不是在同一 try 語句中的其他 handler. 乙個異常的語句可以同時包括多個異常名, 但需要用括號括起來, 比如:

except(runtimeerror, typeerror, nameerror):pass

最後的異常段可以忽略異常的名字, 用以處理其他的情況. 使用這個時需要特別注意, 因為它很容易遮蔽了程式中的錯誤! 它也用於輸出錯誤訊息, 然後重新產生異常 (讓呼叫者處理該異常):

importsystry:

f= open("myfile.txt")

s=f.readline()

i=int(s.strip())exceptioerror as err:print("i/o error: ".format(err))exceptvalueerror:print("could not convert data to an integer.")except:print("unexpected error:", sys.exc_info()[0])raise

try ... except 語句可以有乙個可選的 else 語句, 在這裡, 必須要放在所有 except 語句後面. 它常用於沒有產生異常時必須執行的語句. 例如:

for arg in sys.ar**[1:]:try:

f= open(arg, "r")exceptioerror:print("cannot open", arg)else:print(arg, "has", len(f.readlines()), "lines")

f.close()

使用 else 比額外的新增**到 try 中要好, 因為這樣可以避免偶然的捕獲乙個異常, 但卻不是由於我們保護的**所丟擲的.

當乙個異常發生了, 它可能有相關的值, 這也就是所謂的異常的引數. 該引數是否出現及其型別依賴於異常的型別.

在 except 語句中可以在異常名後指定乙個變數. 變數會繫結值這個異常的例項上, 並且把引數存於 instance.args. 為了方便, 異常的例項會定義 __str__() 來直接將引數列印出來, 而不用引用 .args. 當然也可以在產生異常前, 首先例項化乙個異常, 然後把需要的屬性繫結給它.

try:raise exception("spam", "eggs")exceptexception as inst:print(type(inst)) #the exception instance

print(inst.args) #arguments stored in .args

print(inst) #__str__ allows args to be printed directly,

#but may be overridden in exception subclasses

x, y = inst.args #unpack args

print("x =", x)("spam", "eggs")

("spam", "eggs")

x=spam

y= eggs

如果乙個異常有引數, 它們將作為異常訊息的最後一部分列印出來.

異常的 handler 處理的異常, 不僅僅是 try 語句中那些直接的異常, 也可以是在此處呼叫的函式所產生的異常。

python3,異常的小例項(二)

list 1,8,9,19,88,3,5,6,0,2,4,7,22,66,13 mid 0for i in range 0 len list 1 for j in range i 1 len list iflist i list j mid list i list i list j list j m...

Python3 異常處理

python3.5 異常處理 try用法 try except語句主要是用於處理程式正常執行過程中出現的一些異常情況 try finally語句則主要用於在無論是否發生異常情況,都需要執行一些清理工作的場合 完整語句中,else語句的存在必須以except x或者except語句為前提,也就是說el...

Python3 異常捕獲

try.except.用於異常捕獲,當一段 程式執行時出現異常 報錯 會導致整個程式結束,出現異常的地方之後的邏輯 就不會被執行了,所以需要捕獲異常,當捕獲到異常之後,可以對異常進行處理,處理完成之後,可以保證專案中的其他 不會受影響 exception 所有錯誤型別的基類 1.indexerror...