Kiwi lee

在 python3.8 前可以使用 keyword only parameters 做為 function 的參數限定用 keyword,而在其之後的版本則加入了 position parameters 使參數必須按照 position 輸入,更強化了對 function 的檢查。

def process_data(data1, data2, /, data3)
# OK: process_data(1, 2, data3=3)
# no: process_data(1, data2=2, data3=3)

def process_data(data1, data2, /, data3, *, data4=4)
# OK: process_data(1, 2, data3=3)
# no: process_data(1, data2=2, data3=3)
# ok: process_data(1, 2, data3=3)
# ok: process_data(1, 2, 3, data4=4)
# no: process_data(1, 2, 3, 4)
  • position ( / ): 在這個符號前的參數只能使用 position 按照對應順序輸入
  • keyword ( * ): 在這個符號後的參數限定用 keyword 輸入

以上兩者可以混合使用,先使用 / ,再使用 * 即可。

Reference

PEP 570 — Python Positional-Only Parameters | Python.org

Strict Python function parameters (sethmlarson.dev)

--

--

忽略不想被 pytest 執行的檔案,及忽略被涵蓋進去 pytest-cov 的計算,這篇大概是講這兩件事。

前言

事件 1: 不想被 pytest 執行的檔案

因為 pipeline 有規定的檔案名字,結果那個檔案名字剛好被 pytest 捕抓到執行,因此需要忽略這個檔案,不想被 pytest 抓起來執行

事件 2: 將某些檔案排除在 python-cov 的計算

就是如標題所說

事件 1 的解法

利用 --ignore 來排除

> CLI

可以指定 file 或是 folder

pytest --ignore test_nothing.py
pytest --ignore test_nothing/

> pytest.ini

利用 adopts 欄位來將 CLI 相關的參數塞入進去,像是 --ignore

[pytest]
addopts = --ignore=test_nothing.py

補充

你可以使用 --ignore-glob 來匹配 Unix shell-style wildcards 的檔名

--ignore-glob='*_01.py'

就可以排除像是 test_01.py , nose_01.py 任何以 01.py 結尾的答案

pytest 自己目前用的格式 (゚∀。)

[pytest]
addopts = -vv
--cov=src/
--cov-report=term-missing
--cov-config=.coverage
--ignore=test_skip

事件 2 的解法

延伸上面的 pytest configuration,我們的 pytest-cov 的檔案是 .coverage ,那針對 pytest cov 的設定,就是要去修改 omit 的值

[run]
omit =
tests/*
apitest/*

結論

這篇好水 _(:3 ⌒゙)_

--

--