Python基礎入門(錯誤與異常)
阿新 • • 發佈:2018-12-03
#錯誤與異常 #錯誤主要是語法上的錯誤 # prinnt("no") #拼寫錯誤 NameError: name 'prinnt' is not defined print("yes"); # 多加了分號然而並沒有錯 # print("no")#中文輸入法 IndentationError: unexpected indent #異常是指語法正確的情況下,會在執行期間進行報錯 #num = 1/0 這是每一種程式語言講到異常都會使用這個例子 eroDivisionError: division by zero #b = num+1 num變數沒有進行定義 NameError: name 'num' is not defined # '2'+2 TypeError: Can't convert 'int' object to str implicitly print(int('2')+2) # 2+'2' TypeError: unsupported operand type(s) for +: 'int' and 'str' b = str(2)+'2' print(b,type(b)) yes 4 22 <class 'str'> In [20]: """ 首先,執行try子句(在關鍵字try和關鍵字except之間的語句) 如果沒有異常發生,忽略except子句,try子句執行後結束。 如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的型別和 except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的程式碼。 如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。 一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多隻有一個分支會被執行 #那麼出現了異常的時候應該怎麼進行處理 """ 首先,執行try子句(在關鍵字try和關鍵字except之間的語句) 如果沒有異常發生,忽略except子句,try子句執行後結束。 如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的型別和 except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的程式碼。 如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。 一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多隻有一個分支會被執行 """ while True: try: x = int(input("Please enter a number: ")) break except ValueError: print("Oops! That was no valid number. Try again ") Please enter a number: a Oops! That was no valid number. Try again Please enter a number: 'a' Oops! That was no valid number. Try again Please enter a number: 2 In [22]: import sys try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except OSError as err: print("OS error: {0}".format(err)) except ValueError: print("Could not convert data to an integer.") except (RuntimeError, TypeError, NameError): pass except: print("Unexpected error:", sys.exc_info()[0]) OS error: [Errno 2] No such file or directory: 'myfile.txt' try except 語句還有一個可選的else子句,如果使用這個子句,那麼必須放在所有的except子句之後。這個子句將在try子句沒有發生任何異常的時候執行。 Python 使用 raise 語句丟擲一個指定的異常。例如: In [23]: raise NameError('Koeb') --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-23-7fbd1276157a> in <module>() ----> 1 raise NameError('Koeb') NameError: Koeb 自定義異常 In [25]: class MyError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) raise MyError("oh shit") --------------------------------------------------------------------------- MyError Traceback (most recent call last) <ipython-input-25-05e8a67aef87> in <module>() 4 def __str__(self): 5 return repr(self.value) ----> 6 raise MyError("oh shit") MyError: 'oh shit'