py语法错误与异常处理
生活随笔
收集整理的這篇文章主要介紹了
py语法错误与异常处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python的異常處理
- 一,語法錯誤(解析錯誤)
- 1,解析錯誤invalid syntax
- 二,內置的異常
- 1,內置異常
- 三,異常的處理
- 1,基本的try except語句
- 2,except語句
- 3,eles語句
- 4,異常參數
- 5,處理調用函數的異常
- 四,拋出異常raise關鍵字
- 1,強制拋出異常
- 2,處理并拋出異常
- 五,用戶自定義異常(異常類)
- 1,以error結尾,繼承父類
- 2,代碼實現
- 六,finally語句
- 1,try finally
- 2,return在異常中
- 3,算除法demo
- 4,關于finally注意的點
- 5,用finally關閉文件流
- 七,預定義清理操作
- 1,自動關閉流的操作
一,語法錯誤(解析錯誤)
1,解析錯誤invalid syntax
>>> flag = True>>> if flag print(flag)File "<stdin>", line 1if flag print(flag)^SyntaxError: invalid syntax箭頭指的地方少了 :號>>> if flag:... print(flag)...True二,內置的異常
1,內置異常
- 內置異常是python語句運行時發生的異常
- 分子為0,不存在的名稱,類型錯誤
三,異常的處理
1,基本的try except語句
- 輸入句子,直到是整數結束
-
try的工作原理
? 首先,執行 try 子句 (try 和 except 關鍵字之間的(多行)語句)。? 如果沒有異常發生,則跳過 except 子句 并完成 try 語句的執行。? 如果在執行try 子句時發生了異常,則跳過該子句中剩下的部分。然后,如果異常的類型和 except 關鍵字后面的異常匹配,則執行 except 子句 ,然后繼續執行 try 語句之后的代碼。? 如果發生的異常和 except 子句中指定的異常不匹配,則將其傳遞到外部的 try 語句中;如果沒有找到處理程序,則它是一個未處理異常,執行將停止并顯示如上所示的消息。
2,except語句
- 見異常拋出就結束程序。except,可以用元組接收異常。
- except后面的異??梢允÷?#xff0c;謹慎使用,可能處理不到別的異常
3,eles語句
- 如果異常在try里面不引發,可以把不引發異常的代碼寫在else句子里面
4,異常參數
- 發生異常時,它可能具有關聯值,稱為異常參數,參數的存在和類型取決于異常類型。 Exception.args() 返回一異常參數的元組
5,處理調用函數的異常
def division():print(1/0)passdef my_fails():try:division()except ZeroDivisionError as e:print(e)my_fails()四,拋出異常raise關鍵字
1,強制拋出異常
>>> raise NameError('I am wrong...')Traceback (most recent call last):File "<stdin>", line 1, in <module>NameError: I am wrong…- 參數可簡寫
2,處理并拋出異常
>>> try:... raise NameError... except NameError:... print('name wrong')... raise...name wrongTraceback (most recent call last):File "<stdin>", line 2, in <module>NameError>>>五,用戶自定義異常(異常類)
1,以error結尾,繼承父類
- 程序可以通過創建新的異常類來命名它們自己的異常。異常通常應該直接或間接地從 Exception 類派生。
2,代碼實現
# 異常類 class Error(Exception):# 用于異常的父類passclass InputError(Error):def __init__(self, expression, msg):self.expression = expressionself.msg = msgclass TransitionError(Error):def __init__(self, previous, next, msg):self.previous = previousself.next = nextself.msg = msg六,finally語句
1,try finally
>>> try:... raise KeyboardInterrupt... finally:... print('hello world')... hello worldTraceback (most recent call last):File "<stdin>", line 2, in <module>KeyboardInterrupt2,return在異常中
def bool_return():try:return Truefinally:return False print(bool_return())3,算除法demo
def divide(x, y):try:result = x / yexcept ZeroDivisionError:print('余數不為0')else:print('結果是:', result)finally:print("我會被打印,因為我是必須被執行的。")divide(1, 0)divide('1', '1') # 沒有對應的NameError處理,所以會在finally執行后,引發異常4,關于finally注意的點
? 如果在執行 try 子句期間發生了異常,該異常可由一個 except 子句進行處理。如果異常沒有被某個 except 子句所處理,則該異常會在 finally 子句執行之后被重新引發。 ? 異常也可能在 except 或 else 子句執行期間發生。同樣地,該異常會在 finally 子句執行之后被重新引發。 ? 如果在執行 try 語句時遇到一個 break, continue 或 return 語句, 則 finally 子句將在執行 break, continue 或 return 語句之前被執行。 ? 如果 finally 子句中包含一個 return 語句, 則返回值將來自 finally 子句的某個 return 語句的返回值, 而非來自 try 子句的 return 語句的返回值。5,用finally關閉文件流
try:f = open('file_name', 'r', encoding='utf-8')f.read() except:print('unexcept wrong...')raise finally:if "f" in locals(): # 局部變量作用域的集合print(f)f.close()- 可以關閉數據庫連接,網絡流
七,預定義清理操作
1,自動關閉流的操作
>>> f = open('TestError.py', 'r', encoding = 'utf-8') >>> f.read(1)''>>> 上面的代碼并沒用關流,但是我可能讀取文件出錯了,f文件流一直開著。用with就可以了,遇到問題時,f也會關閉>>> with opne('1.txt', 'r') as f:... f.read()... Traceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'opne' is not defined>>> fTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'f' is not defined總結
以上是生活随笔為你收集整理的py语法错误与异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种常见排序算法时间复杂度
- 下一篇: Unity URP 内置的 Partic