成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Playwright中 With as 的用法

開發 前端
代碼后面的語句 print("---- end ----") 并沒有執行,這就說明程序發生了異常,執行了__exit__ 以后,程序就退出了!為什么呢?還記得前面講過的知識點嗎?

大家在做playwright自動化測試時,一定會遇到下面的寫法

with sync_playwright() as p:
         自動化代碼

很多同學可能只是按照這種寫法來編寫項目的自動化測試代碼,對于具體細節可能并不了解,今天我來結合playwright講解一下 Python中的 with ... as 用法。建議大家拷貝文檔中的腳本實際運行一下,學習的效果會更好!

with ... as 概述

在Python中,with語句用于異常處理,使代碼更簡潔、可讀性更強。它簡化了文件流等公共資源的管理。基礎表達式如下:

with 表達式a [as target]:
        代碼塊

在上面的表達式中, [as target] 中的部分可以省略。其中,target 參數用于指定一個變量,該語句會將表達式a指定的結果保存到該變量中,我們可以通過with ... as 操作上下文對象。具體實現方法是為一個類定義__enter__和__exit__兩個函數。

with 表達式a [as target] 的執行過程是首先執行__enter__ 函數,它的返回值會賦給as后面的target,如果不寫as target,返回值會被忽略;然后開始執行代碼塊中的語句;最后不論執行成功或者失敗都會執行__exit__函數,為了更好的理解其運行原理,請參考下面的詳細代碼解釋:

with obj as f:
      f.method(...)
# obj 表示一個對象(或是一個表達式, 結果為一個對象)
# 調用 obj 對象的 __enter__ 方法, 返回值賦值給 as 右邊的變量 f,即: f = obj.__enter__()
# 執行 with 代碼塊中的代碼 f.method(...)
# 執行完 with 代碼塊中的代碼后, 無論是否發生異常, 調用 obj 的 __exit__ 方法,即: obj.__exit__(...)

上面的過程其實等價于

obj = ...
f = obj.__enter__()
try:
    # f.method(...)
finally:
    obj.__exit__(...)

注意這里是 try finally 而不是 try except!!!

with ... as 實例

下面舉一個例子,讓大家了解一下,with真正強大之處——它可以處理異常。

class WithSample:

    def __enter__(self):
        print("__enter__()")
        return self

    def __exit__(self, type, value, trace):
        print(  "__exit__()")
        print( "type:", type) #輸出type值
        print( "value:", value) #輸出value值
        print("trace:", trace) #輸出trace值

    def do_something(self):
        num = 1 / 0 #模擬異常出現
        return num + 1

with WithSample() as sample:
    sample.do_something()

print("---- end ----") #這句話很有用!

輸出:

Traceback (most recent call last):

File "C:/Users/Administrator/PycharmProjects/playwright/demo2.py", line 19, in <module>

sample.do_something()

File "C:/Users/Administrator/PycharmProjects/playwright/demo2.py", line 13, in do_something

num = 1 / 0

ZeroDivisionError: division by zero

__enter__()

__exit__()

type: <class 'ZeroDivisionError'>

value: division by zero

trace: <traceback object at 0x000002C7FE590288>

從上面代碼我們得知,在with后面的代碼塊會首先執行__enter__方法的值,然后在拋出任何異常時,_exit__方法都會被執行,并輸出type、value和trace的值。

一個容易被忽略的問題

這里需要注意一下,代碼后面的語句 print("---- end ----") 并沒有執行,這就說明程序發生了異常,執行了__exit__ 以后,程序就退出了!為什么呢?還記得前面講過的知識點嗎?

這里劃重點!with obj as f 等價于try ... finally,而不是 try ... except... finally

最后補充一句!如果想捕獲 with as 的異常,我們仍然需要使用try ... except... finally

try:
    with api  as f:
          #business as usual
except Exception as e:
          #handle exception
責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-12-12 13:55:00

Pythonsubprocess命令

2025-01-15 08:19:12

SpringBootRedis開源

2020-12-07 13:48:48

EditorAndroid開發者

2009-08-11 10:45:58

linux中du命令參linux命令行參數linux命令行

2009-05-12 10:55:06

SQLFOR XML模式

2010-10-09 09:56:51

JavaScriptObject對象

2010-09-07 16:46:59

CSSexpression

2010-09-08 13:01:20

atCSS

2010-08-26 11:01:00

ulliCSS

2009-12-02 19:56:33

PHP中try{}ca

2023-12-21 13:59:41

2009-08-03 11:54:34

linux at命令linux at命令詳cron

2024-03-19 14:18:48

C#后端編程

2023-04-27 11:06:54

Chromium開源項目

2015-04-07 10:31:31

PHPMySQLBuffer用法

2010-05-24 18:32:16

SVN中tag bra

2011-08-15 11:37:20

iPhone開發Mask

2011-08-03 13:11:10

Oracle數據庫序列

2010-08-20 16:29:01

padding-lef

2011-08-03 17:18:58

iPhone UILabel UISlider
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩视频 | 久久久久国产 | 黄色免费看| 日韩欧美在线免费观看 | 激情自拍偷拍 | 欧美日韩久久 | 免费一区在线观看 | 超碰人人人人 | 夜夜骚 | 亚洲国产成人精品一区二区 | 中文字幕国 | 午夜日韩精品 | 亚洲成人av在线播放 | 91社区在线观看高清 | 亚洲经典一区 | 国产婷婷在线视频 | 国产激情视频 | 国产精品一区二区三区在线 | 日韩欧美中文字幕在线观看 | 日韩免费一区二区 | 亚洲91精品 | www久久av | 国产在线观看一区二区三区 | 狠狠入ady亚洲精品经典电影 | 99reav | 欧美日韩国产一区 | 成人性视频免费网站 | 老司机成人在线 | 中文字幕乱码一区二区三区 | 亚洲一一在线 | 欧美成人精品在线 | 午夜电影福利 | 久久成人免费 | 一区二区三区在线免费观看 | 九九精品久久久 | 中文一区二区 | 国产精品久久久久久久久久三级 | 成人av在线大片 | 少妇一级淫片免费播放 | 日韩欧美一区二区三区 | 欧美一区在线视频 |