python程式設計 5 錯誤與異常

2021-07-16 10:40:37 字數 3203 閱讀 5478

1 異常處理

import sys

try:

f = open("myfile.txt")

s = f.readline()

i = int(s.strip())

# except oserror as err:

# print("os error: ".format(err))

# except valueerror:

# print("could not convert data to an integer")

except (oserror,valueerror): #(error1,error2),異常元組

print("an error occurred")

except:#通配異常

print("unexpected error:",sys.exc_info()[0]) #print prompt message

raise #將異常繼續丟擲,給上層處理

else:#沒有發生異常

print("there is no error or execpetion in the programming code")

2 丟擲異常

#python使用raise語句丟擲乙個指定的異常

try:

raise valueerror("hithere")

except valueerror:

print("an exception flew by")

raise #如果你只想知道這是否丟擲了乙個異常,

# 並不想去處理它,那麼乙個簡單的 raise 語句就可以再次把它丟擲

3 使用者自定義異常

#使用者自定義異常

#你可以通過建立乙個新的exception類來擁有自己的異常。

# 異常應該繼承自 exception 類,或者直接繼承,或者間接繼承,

class myerror(exception):

def __init__(self,value):#類 exception 預設的 __init__() 被覆蓋。

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)

#當建立乙個模組有可能丟擲多種不同的異常時,

# 一種通常的做法是為這個包建立乙個基礎異常類,然後基於這個基礎類為不同的錯誤情況建立不同的子類:

class error(exception):

"""base class for exceptions in this module."""

pass

class inputerror(error):

""" exception raised for errors in the input

attributes:

expression--input expression in which the error occurred

message --explanation of the error

"""def __init__(self,expression,message):

self.expression = expression

self.message = message

class transitionerror(error):

"""raised when an operation attempts a state transition that's not allowed

attributes:

previous -- state at beginning of transition

next -- attempted new state

message -- explanation of why the specific transition is not allowed

"""def __init__(self,previous,next,message):

self.previoud = previous

self.next = next

self.message = message

4 定義清理行為

>>> def divide(x, y):

try:

result = x / y

except zerodivisionerror:

print("division by zero!")

else:

print("result is", result)

finally:

print("executing finally clause")

>>> divide(2, 1)

result is 2.0

executing finally clause

>>> divide(2, 0)

division by zero!

executing finally clause

>>> divide("2", "1")

executing finally clause

traceback (most recent call last):

file "", line 1, in ?

file "", line 3, in divide

typeerror: unsupported operand type(s) for /: 'str' and 'str'

5 預定義的清理行為

#一些物件定義了標準的清理行為,無論系統是否成功的使用了它,一旦不需要它了,那麼這個標準的清理行為就會執行

for line in open("myfile.txt"):

print(line,end="") #這段**的問題是,當執行完畢後,檔案保持開啟的轉態,並沒有關閉

with open("myfile.txt") as f:

for line in f:

Python程式設計中的錯誤與異常

到目前為止,我們還沒有提到錯誤訊息,但是如果你已經嘗試過那些例子,你可能已經看過了一些錯誤訊息。目前 至少 有兩種可區分的錯誤 語法錯誤 和 異常。語法錯誤 語法錯誤又稱解析錯誤,可能是你在學習python 時最容易遇到的錯誤 python程式設計中的錯誤與異常 解析器會輸出出現語法錯誤的那一行,並...

python 錯誤與異常

錯誤在執行前修改,邏輯錯誤無法修改 執行時,異常產生,檢查到錯誤且直譯器認為是異常,丟擲異常 異常處理,截獲異常,忽略或者終止程式處理異常 try try suite except exception e exception blocktry aexcept nameerror,e print ca...

python 錯誤與異常

開發人員在編寫程式的時候難免會遇到錯誤,那遇到錯誤要如何找到錯誤並處理異常呢?本篇主要實現異常的處理方法。一 錯誤分類 1.語法錯誤 syntaxerror 2.執行時錯誤 這種包括很多異常的型別,eg nameerror zerodivisionerror等 二 異常處理的基本語法 try 執行 ...