日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

py语法错误与异常处理

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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/0 # ZeroDivisionErrorTraceback (most recent call last):File "<stdin>", line 1, in <module>ZeroDivisionError: division by zero>>>>>> var + 3 # NameErrorTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError: name 'var' is not defined>>>>>> '2' + 3 # TypeErrorTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: can only concatenate str (not "int") to str>>>

三,異常的處理

1,基本的try except語句

  • 輸入句子,直到是整數結束
def test():while True:try:x = int(input('請輸入整數:\n'))print(x)breakexcept ValueError:print('噢哦,輸入數字,再來一次...')
  • try的工作原理

    ? 首先,執行 try 子句 (try 和 except 關鍵字之間的(多行)語句)。? 如果沒有異常發生,則跳過 except 子句 并完成 try 語句的執行。? 如果在執行try 子句時發生了異常,則跳過該子句中剩下的部分。然后,如果異常的類型和 except 關鍵字后面的異常匹配,則執行 except 子句 ,然后繼續執行 try 語句之后的代碼。? 如果發生的異常和 except 子句中指定的異常不匹配,則將其傳遞到外部的 try 語句中;如果沒有找到處理程序,則它是一個未處理異常,執行將停止并顯示如上所示的消息。

2,except語句

  • 見異常拋出就結束程序。except,可以用元組接收異常。
def test1():try:print(1 + '1', 1/0)except (TypeError, ZeroDivisionError):raise ''' print(1 + '1', 1/0) TypeError: unsupported operand type(s) for +: 'int' and 'str' '''
  • except后面的異??梢允÷?#xff0c;謹慎使用,可能處理不到別的異常
def except_strip():import systry:f = open('TestError.py', 'r') # oserror 打開不了s = f.readline()i = int(s.strip()) # 可能轉換不成數字except OSError as err:print('oserror', err)except ValueError as v:print('轉換不了', v)except:print('unexcept error', sys.exc_info()[0]) # 其它的不確定錯誤raisefinally:f.close()

3,eles語句

  • 如果異常在try里面不引發,可以把不引發異常的代碼寫在else句子里面
def else_except():import sysfor arg in sys.argv[0:]:try:f = open(arg, 'r', encoding='UTF-8')except OSError:print('不能打開', arg)else: # 沒用錯誤,正常執行print('下面是讀取的本文件: \n', f.read())f.close()

4,異常參數

  • 發生異常時,它可能具有關聯值,稱為異常參數,參數的存在和類型取決于異常類型。 Exception.args() 返回一異常參數的元組
def except_args():try:raise Exception('arg1', 'arg2')except Exception as e:print(type(e))print(e.args) # ('arg1', 'arg2')print(e)x, y = e.args # 解包參數print(x, y)

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…
  • 參數可簡寫
>>> raise NameErrorTraceback (most recent call last):File "<stdin>", line 1, in <module>NameError>>>

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>KeyboardInterrupt

2,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语法错误与异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。