1. 程式人生 > 其它 >VMware安裝centOS7

VMware安裝centOS7

錯誤與異常

Error錯誤:

  • 語法錯誤,在編譯程式碼階段就能檢測出來;
print(aaa
if :
  • 邏輯錯誤,在執行過程中顯現出來。
num=input("請輸入數字:")
get_sum=1+int(num)  #當輸入的是一個字串aaa時,int("aaa")就會發生邏輯錯誤

Exception異常:

在執行程式碼的過程發生的中斷程式的事件,一個異常標識一種錯誤。例如:

print("aaa")
print(name)
print("end")

輸出: 在執行到第二個print的時候name沒有定義,報錯。

常用異常:

AttributeError 試圖訪問一個物件沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法開啟檔案
ImportError 無法引入模組或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;程式碼沒有正確對齊
IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典裡不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予物件的變數
SyntaxError Python程式碼非法,程式碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入物件型別與要求的不符合
UnboundLocalError 試圖訪問一個還未被設定的區域性變數,基本上是由於另有一個同名的全域性變數,
導致你以為正在訪問它
ValueError 傳入一個呼叫者不期望的值,即使值的型別是正確的
其他異常
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

異常處理

概念

什麼是異常處理?

python直譯器檢測到錯誤,觸發異常(也允許程式設計師自己觸發異常)
程式設計師編寫特定的程式碼,專門用來捕捉這個異常(這段程式碼與程式邏輯無關,與異常處理有關)
如果捕捉成功則進入另外一個處理分支,執行你為其定製的邏輯,使程式不會崩潰,這就是異常處理。

語法

異常處理的語法:

  • if判斷
# num=input("請輸入數字:")
# if num.isdigit():
#     get_sum=1+int(num)
#     print(get_sum)
# else:
#     print("輸入有誤")
  • python特定的異常處理語法

1)基礎的 try except

num=input("請輸入數字:")
try:
    get_sum=1+int(num)
    print(get_sum)
except ValueError:  
    print("輸入有誤")  #只有觸發ValueError異常時,才會走到這裡

2)多分支異常

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)

3)萬能異常Exception
可以匹配絕大多數情況的異常,最好打印出異常的錯誤說明。

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)

4)多分支+萬能異常
將能預料到的異常型別放到分支裡面處理,剩下的情況再用萬能異常匹配處理。

dic={"11":"aa","22":"2"}
try:
    print(dic["key"])
except NameError:
    print("NameError錯誤")
except KeyError:
    print("KeyError錯誤")
except ValueError:
    print("ValueError錯誤")
except Exception as e:
    print(e)

5)else的使用
try中的程式碼正常執行,沒有異常的時候會執行else中的程式碼。try except else固定連用

dic={"11":"aa","22":"2"}
try:
    print(dic["11"])
except KeyError:
    print("KeyError錯誤")
except ValueError:
    print("ValueError錯誤")
else:
    print("good")

6)finally的使用
無論是否有異常,或突然退出,都會執行finally中的內容,可用於資源回收

def get_file():
    try:
        f = open("test.log")
        # exit()
		return f.read()  #return或者exit()都會執行finally
    except Exception as e:
        pass
    finally:
        print("執行finally")
        f.close()
get_file()

7)主動拋異常 raise

raise ValueError  #主動丟擲ValueError的異常

s1 = 'hello'
try:
    int(s1)
except Exception:
    print("value型別錯誤")
    raise      #丟擲匹配到此分支的錯誤型別

8)自定義異常
一般程式碼面向的物件是程式設計師,而不是使用者時,才有可能自定義異常。

class MydefError(Exception):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg

# raise MydefError("我說它錯了,它就錯了")

try:
    raise MydefError("我說它錯了,它就錯了")
except MydefError as e:
    print(e)

9)斷言 assert
用法:assert ,功能和if類似,但是assert 定格寫,下面的程式也無需縮排。
只有滿足assert True時,下面的程式才會執行。通常用於整個大程式的邏輯判斷,符合則繼續執行,不符合,則不執行後續全部程式碼。

print("start")
assert True
# assert False
print("aaa")

總結:python中異常處理常用語法:

try except
try except else
try except else finally
try/except/finally
try/finally