ãšã³ããŠãŒã¶ãŒã¯ããããã°ã®ç®çã§ãšã©ãŒã¡ãã»ãŒãžã«äŸåããŠããŸãã ãããã£ãŠãããªã¬ãŒããããšã©ãŒã«å¿ããŠãæ£ãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããããã«ããããšãéèŠã§ãã
äžå¿çãªã¢ã€ãã¢ã¯ããããå€æããããšã§ãã
with pytest.raises(klass):
# Some code that raise an error
ããã«ïŒ
with pytest.raises(klass, match=msg):
# Some code that raise an error
pytest.raises
ã«ã€ããŠè©³ããã¯ããã¡ããã芧ãã ããã
çºçãããšã©ãŒã¡ãã»ãŒãžãå€éšãšã©ãŒã¡ãã»ãŒãžã§ããå ŽåïŒãã³ãåºæã§ã¯ãªãããšãæå³ããŸãïŒã external_error_raised
代ããã«pytest.raises
external_error_raised
ã䜿çšããå¿
èŠããããŸãã
䜿çšexternal_error_raised
䌌__exactly__ã§ãpytest.raises
å¯äžã®éãã¯ããªããåæ ŒããŠããªããšããããšã§ãmatch
åŒæ°ã
äŸãã°ïŒ
import pandas._testing as tm
def test_foo():
with tm.external_error_raised(ValueError):
raise ValueError("foo")
https://github.com/pandas-dev/pandas/issues/30999
ããªãã®PRã§ã
äœæ¥ã2åã«ããããšã¯ãããŸããã®ã§ãäœæ¥ãèšç»ããŠããããšãã³ã¡ã³ãããŠãã ããïŒç§ã«èšåããå¿ èŠã¯ãããŸãããäœæ¥ãèšç»ããŠããããšã宣èšããã ãã§ãäœãããã§ã«è¡ãããŠãããã©ããã確èªããããšãå¿ããªãã§ãã ããïŒã
ãå®äºããšããŒã¯ããå¿
èŠã®ãããã¡ã€ã«ïŒãã以äžäœæ¥ããªããã®ããã«ïŒããå®äºããšããŒã¯ãããŠããªãå Žåã¯ããã®ããšãç¥ãããŠã³ã¡ã³ãããŠãã ããïŒãããŠã @MomIsBestFriend
å
¥ããŠç§ã«èšåããŠãã ããïŒã³ã¡ã³ãã®æ¬æã«
å®å šãªãªã¹ããèªåã§çæããã«ã¯ã次ã®ã³ãã³ããå®è¡ã§ããŸãã
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/
次ã®ãããªåäžã®ãã¡ã€ã«ã«å¯ŸããŠå®è¡ããããšãã§ããŸãã
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/PATH/TO/SPECIFIC/FILE.py
ãã¡ã€ã«ã«è£žã®pytest.raises
ãå«ãŸããŠããå Žåãã¹ã¯ãªããã¯æ¬¡ã®ããã«åºåããŸãã
pandas/tests/arithmetic/test_numeric.py:553:Bare pytests raise have been found. Please pass in the argument 'match' as well the exception
ã€ãŸãã pandas/tests/arithmetic/test_numeric.py
è¡553
ã«ã¯ã裞ã®pytest.raises
ãã¡ã€ã«ã絶ãã移å/ååå€æŽããããšããªã¹ããå€æŽãããå ŽåããããŸãã
ããšããš@gfyoungã«ãã£ãŠéãããïŒ23922ããã»ãšãã©ãã¹ãŠãåããŸããã
ç§ããããïŒ
ç§ã¯äœæ¥ãéå§ããŸãïŒ
pandas / tests / arithmetic / test_numeric.py
pandas / tests / arithmetic / test_object.py
pandas / tests / arithmetic / test_period.py
pandas / tests / arithmetic / test_timedelta64.py
pandas / tests / arrays / interval / test_interval.py
@ gdex1ãããã圹ã«ç«ãŠã°å¹žãã§ã:)
ïŒæ°åã¯è¡çªå·ãè¡šããŸãïŒ
pandas/tests/arithmetic/test_numeric.py:138
pandas/tests/arithmetic/test_numeric.py:141
pandas/tests/arithmetic/test_numeric.py:190
pandas/tests/arithmetic/test_numeric.py:208
pandas/tests/arithmetic/test_numeric.py:210
pandas/tests/arithmetic/test_numeric.py:212
pandas/tests/arithmetic/test_numeric.py:214
pandas/tests/arithmetic/test_numeric.py:232
pandas/tests/arithmetic/test_numeric.py:234
pandas/tests/arithmetic/test_numeric.py:236
pandas/tests/arithmetic/test_numeric.py:238
pandas/tests/arithmetic/test_numeric.py:519
pandas/tests/arithmetic/test_numeric.py:610
pandas/tests/arithmetic/test_numeric.py:615
pandas/tests/arithmetic/test_numeric.py:617
pandas/tests/arithmetic/test_numeric.py:795
pandas/tests/arithmetic/test_numeric.py:798
pandas/tests/arithmetic/test_numeric.py:819
pandas/tests/arithmetic/test_object.py:140
pandas/tests/arithmetic/test_object.py:152
pandas/tests/arithmetic/test_object.py:154
pandas/tests/arithmetic/test_object.py:278
pandas/tests/arithmetic/test_object.py:280
pandas/tests/arithmetic/test_object.py:282
pandas/tests/arithmetic/test_object.py:284
pandas/tests/arithmetic/test_object.py:298
pandas/tests/arithmetic/test_object.py:301
pandas/tests/arithmetic/test_object.py:315
pandas/tests/arithmetic/test_object.py:318
md5-634e15eb80aa764171dbacd11a06b70b
pandas/tests/arithmetic/test_timedelta64.py:51
pandas/tests/arithmetic/test_timedelta64.py:445
pandas/tests/arithmetic/test_timedelta64.py:607
pandas/tests/arithmetic/test_timedelta64.py:609
pandas/tests/arithmetic/test_timedelta64.py:703
pandas/tests/arithmetic/test_timedelta64.py:705
pandas/tests/arithmetic/test_timedelta64.py:707
pandas/tests/arithmetic/test_timedelta64.py:709
pandas/tests/arithmetic/test_timedelta64.py:741
pandas/tests/arithmetic/test_timedelta64.py:743
pandas/tests/arithmetic/test_timedelta64.py:960
pandas/tests/arithmetic/test_timedelta64.py:972
pandas/tests/arithmetic/test_timedelta64.py:1028
pandas/tests/arithmetic/test_timedelta64.py:1037
pandas/tests/arithmetic/test_timedelta64.py:1039
pandas/tests/arithmetic/test_timedelta64.py:1502
pandas/tests/arithmetic/test_timedelta64.py:1505
pandas/tests/arithmetic/test_timedelta64.py:1508
pandas/tests/arithmetic/test_timedelta64.py:1511
pandas/tests/arithmetic/test_timedelta64.py:1536
pandas/tests/arithmetic/test_timedelta64.py:1591
pandas/tests/arithmetic/test_timedelta64.py:1783
pandas/tests/arithmetic/test_timedelta64.py:1785
pandas/tests/arithmetic/test_timedelta64.py:1911
pandas/tests/arithmetic/test_timedelta64.py:1960
pandas/tests/arithmetic/test_timedelta64.py:1962
pandas/tests/arithmetic/test_timedelta64.py:1968
md5-634e15eb80aa764171dbacd11a06b70b
pandas/tests/arrays/interval/test_interval.py:155
@gfyoungãªã¹ãã¯å®éã«ã¯grep -r -e "pytest.raises([a-zA-Z]*)" pandas/tests -l
ã«ãã£ãŠçæãããã®ã§ã¯ãªããïŒ30755ïŒ bare_pytest_raises
ãšåŒã°ããæ€èšŒã¿ã€ãïŒã®ã¹ã¯ãªããã«ãã£ãŠçæãããŸãããããŒãžãããŸãïŒsmileïŒ
@MomIsBestFriendç§ããæäŒãããŸãïŒ
pandas / tests / base / test_constructors.py
pandas / tests / base / test_ops.py
ç§ã¯ãããã®äžè©±ãããããšãã§ããŸãïŒ
@MomIsBestFriend
pandas / tests / io / test_html.py
pandas / tests / io / test_parquet.py
pandas / tests / io / test_sql.py
pandas / tests / io / test_stata.py
pandas / tests / plotting / test_backend.py
pandas / tests / plotting / test_boxplot_method.py
pandas / tests / plotting / test_frame.py
pandas / tests / plotting / test_hist_method.py
pandas / tests / plotting / test_series.py
pandas / tests / Reductions / test_reductions.py
@MomIsBestFriend https://github.com/pandas-dev/pandas/issues/23922ã§ãããã«ã€ããŠããªãã®è°è«ããããŸããã ç§ãããã§èšã£ãããã«ç¹°ãè¿ãã®ã§ïŒç§ãã¡ã¯ãã¹ãŠã®ãšã©ãŒã¡ãã»ãŒãžããç²ç®çã«ã䞻匵ããã¹ãã§ã¯ãªããšæããŸãã
ãã®ã¹ã¬ããã§èšãããããã€ãã®ããšïŒãããå éšãšã©ãŒã¡ãã»ãŒãžã«å¶éããäžèŽãã¡ãã»ãŒãžã®ããã€ãã®ããŒã¯ãŒãã«å¶éããè€éãªãã¿ãŒã³ãé¿ããŸãã
ãŸãããšã©ãŒã¡ãã»ãŒãžãè¡šæããããšã¯ããããé©åã§æ確ãªãšã©ãŒã¡ãã»ãŒãžã§ãããã©ãããå®éã«ãã§ãã¯ãããããæ¹åããå¯èœæ§ãããããšãšå¯æ¥ã«é¢é£ããŠãããšæããŸãã
ããã«çœ®ãä»ã®åé¡ã®è°è«ãã泚æç¹ã®ãªã¹ããæœåºããã®ã¯è¯ããããããŸããã
@jorisvandenbossche
@ MomIsBestFriend ïŒ23922ã§ãããã«ã€ããŠããªãã®è°è«ããããŸããã ç§ãããã§èšã£ãããã«ç¹°ãè¿ãã®ã§ïŒç§ãã¡ã¯ãã¹ãŠã®ãšã©ãŒã¡ãã»ãŒãžããç²ç®çã«ã䞻匵ããã¹ãã§ã¯ãªããšæããŸãã
ç§ã¯å®å šã«åæããŸãããåé¡ã¯ãã©ã®ãšã©ãŒã¡ãã»ãŒãžãã¢ãµãŒãããäœãã¢ãµãŒãããªããã«é¢ããã«ãŒã«ãäœããã®æ¹æ³ã§å®çŸ©ããåæã«ç¶æããå Žåãã©ã®ãšã©ãŒã¡ãã»ãŒãžãã¢ãµãŒãããããã©ã®ãšã©ãŒã¡ãã»ãŒãžãã¢ãµãŒãããªãããç¥ããªãããšã§ãããã®å·ã¯ãåå¿è ã«ããããããçŽ æŽãããïŒIMOïŒã§ãããã
ãŸããCIã§ãããå®æœããå Žåã¯ã bare pytest raises
ãæå³çã«ã裞ãã§ãããã®ãäœããã®æ¹æ³ã§ããŒã¯ããå¿
èŠããããŸãïŒ isort: skip
ã®ã¹ã¿ã€ã«ã®IMOã³ã¡ã³ãã§ååã§ãïŒã人ã
ã¯ãç¹å®ã®bare pytest raise
ãæ
æã«ããåºãã«ãªã£ãŠããããšãç¥ã£ãŠããã§ãããã
ãã®ã¹ã¬ããã§èšãããããã€ãã®ããšïŒãããå éšãšã©ãŒã¡ãã»ãŒãžã«å¶éããäžèŽãã¡ãã»ãŒãžã®ããã€ãã®ããŒã¯ãŒãã«å¶éããè€éãªãã¿ãŒã³ãé¿ããŸãã
å éšãšã©ãŒã¡ãã»ãŒãžããã¹ãããããªãçç±ãããããŸãããããã«è©³ãã説æããŠããã ããŸããïŒ
https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458551763ã§ããªããææããç¹ãããã+1
ã§ãããç§ã¯+2
https://github.com/pandas-dev/pandas/issues/23922#issuecomment-458733117ããã³https://github.com/pandas-dev/pandas/issues/ã§+2
ïŒæå³ãããå ŽåïŒ 23922ïŒissuecomment -458735169 IMOã®ã¡ãªããã¯ãã³ã¹ãããã倧ããããã§ãã
ãŸãããšã©ãŒã¡ãã»ãŒãžãè¡šæããããšã¯ããããé©åã§æ確ãªãšã©ãŒã¡ãã»ãŒãžã§ãããã©ãããå®éã«ãã§ãã¯ãããããæ¹åããå¯èœæ§ãããããšãšå¯æ¥ã«é¢é£ããŠãããšæããŸãã
å šãåæã§ãããŸãã
ããã«çœ®ãä»ã®åé¡ã®è°è«ãã泚æç¹ã®ãªã¹ããæœåºããã®ã¯è¯ããããããŸããã
ïŒ23922ã§ã®äŒè©±ãèªã¿ãŸãããã IMOãåé¡ã®æ¬æã«ãã¡ã¢ããšããŠå ¥ãã䟡å€ã®ãããã®ã¯äœãèŠåœãããŸããã§ãããèŠéããããšãææããŠããã ããŸããïŒ
ïŒ23922ã§ã®äŒè©±ãèªã¿ãŸããããIMOãåé¡ã®æ¬æã«ãã¡ã¢ããšããŠå ¥ãã䟡å€ã®ãããã®ã¯äœãèŠåœãããŸããã§ãããèŠéããããšãææããŠããã ããŸããïŒ
ãã®åé¡ããè¿œå ãããã®ã¯ä»ã«ããŸããããŸããã
ç§ã¯å®å šã«åæããŸãããåé¡ã¯ãã©ã®ãšã©ãŒã¡ãã»ãŒãžãã¢ãµãŒãããäœãã¢ãµãŒãããªããã«é¢ããã«ãŒã«ãäœããã®æ¹æ³ã§å®çŸ©ããåæã«ç¶æããå Žåãã©ã®ãšã©ãŒã¡ãã»ãŒãžãã¢ãµãŒãããããã©ã®ãšã©ãŒã¡ãã»ãŒãžãã¢ãµãŒãããªãããç¥ããªãããšã§ãããã®å·ã¯ãåå¿è ã«ããããããçŽ æŽãããïŒIMOïŒã§ãããã
ãŸããCIã§ãããå®æœããå Žåã¯ã裞ã®pytestãäžãããã®ãæå³çã«ã裞ããšããŠããŒã¯ããå¿ èŠããããŸãïŒisortã®ã¹ã¿ã€ã«ã®IMOã³ã¡ã³ãïŒã¹ãããã§ååã§ãïŒããŸããä»ã®äººã¯ç¹å®ã®ããšãç¥ã£ãŠããŸããããåºãã®pytestã¬ã€ãºã¯ãããšããåºãã§ãã
ãããã¯ããã¹ããããã®ãšãã¹ãããªããã®ãéžãã§éžæããããšãç§ã奜ãæ¹åã§ã¯ãªãçç±ã®äžéšã§ãã ãŸãã except
ãããã¯å
ã®ãšã©ãŒã¡ãã»ãŒãžæååããã§ãã¯ããããšãããã®ã§ãéçºäžã«é©åãªãšã©ãŒã¡ãã»ãŒãžã圹ç«ã€ããšãä»ãå ããŠãããŸãã
ãŸãããããã®ãå éšãã¡ãã»ãŒãžãããã»ã©éèŠã§ã¯ãªãå Žåããããããªããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããã®ã§ããããã 次ã«ãã¡ãã»ãŒãžã空ã§ããããšãè¡šæãããã«ããŒãäœæããŸãã
å éšãšã©ãŒã¡ãã»ãŒãžããã¹ãããããªãçç±ãããããŸãããããã«è©³ãã説æããŠããã ããŸããïŒ
ã ããç§ã¯ãå éšãšã©ãŒã¡ãã»ãŒãžã«å¶éããããšèšããŸãããããå éšãã¯å°ãææ§ãããããŸãã...ã€ãŸãããã³ãèªäœããçºçãããšã©ãŒã¡ãã»ãŒãžã§ãããã¡ããããããããã¹ãããããšæããŸãã ããããç§ãã¡ïŒIMOïŒã¯ãããŸãå€ãã®å€éšãšã©ãŒã¡ãã»ãŒãžããã¹ãããã¹ãã§ã¯ãªãããšãæå³ããŸãããã€ãŸããnumpyãä»ã®ã©ã€ãã©ãªããã®ã¡ãã»ãŒãžã§ãã Numpyã¯ããããå€æŽããå¯èœæ§ãããããã®åŸãnumpyã®å€èŠ³äžã®å€æŽã«ããããã¹ãã倱æãå§ããŸãïŒããã¯ä»®èª¬ã§ã¯ãªããå é±èµ·ãã£ããšæããŸãïŒã
ããã§ã httpsïŒ//github.com/pandas-dev/pandas/pull/30998#discussion_r366726966ã®å¥ã®ã³ã³ããã¹ãã§ãå éšãã䜿çšããŸãã決ããŠè¡šç€ºãããã¹ãã§ã¯
ïŒ23922ïŒã³ã¡ã³ãïŒã§ææãããç¹ãããããŸãããç§ã¯+1ã§ãããïŒ23922ïŒã³ã¡ã³ãïŒãšïŒ23922ïŒã³ã¡ã³ãïŒã§ã¯+2ïŒæå³ãããå ŽåïŒã§ãã IMOã®ã¡ãªããã¯ã³ã¹ãããã倧ãããªããŸãã
ããã«ãªã³ã¯ãã@simonjayhawkinsã®ã³ã¡ã³ããå ¥ããŸãããïŒ
ç§ã¯ãããããééã£ãŠãããã
- ãã©ã¡ãŒã¿åã§ãããã¹ããç¹å®ãã
- åå²ããå¿ èŠããããã¹ããç¹å®ãã
- ãã¹ããããæ éã¢ãŒãã®ããè¯ãç解
- ãã¹ãã«éæ¥çã«ããã¥ã¡ã³ããè¿œå ãã
- ãšã©ãŒã¡ãã»ãŒãžã®äžè²«æ§ãé«ããããšãã§ããå Žæãç¹å®ãã
- åé·ãªãã¹ããç¹å®ãã
- ãšã©ãŒã¡ãã»ãŒãžã®æ¹åã«åœ¹ç«ã¡ãŸã
- ééã£ãçç±ã§çŸåšåæ ŒããŠãããã¹ããç¹å®ããŸãã
ããã¯ãã¹ãŠæçšãªããšã§ããç§ã¯å®å šã«åæããŸãã ããããããã¯ç°¡åãªããšã§ã¯ãããŸããããã®åé¡ããããããåãé€ãããã®ã§ããã°ããã®åé¡ã¯åå¿è åãã§ã¯ãããŸããã ãã¡ãããåå¿è ã¯ããããã¹ãŠãäžåºŠã«è¡ãå¿ èŠã¯ãããŸããããã¢ãµãŒããè¿œå ããPRã¯ãäœãããã«ãçŸåšã®ãšã©ãŒã¡ãã»ãŒãžãpytest.raisesåŒã³åºãã«ç²ç®çã«è¿œå ãããããšã«ããªãè¿ããšæããŠããŸããããã«ïŒäžèšã®ç¹ïŒã
ãŸããäžèšã®ç¹ããã®æŒç¿ã圹ç«ãŠãã®ã§ããã°ããã®åé¡ã®äžçªäžã«çœ®ãã®ã圹ç«ã€ãããã«ã€ããŠã®ããå ·äœçãªæ瀺ã ãšæããŸãã
æ確ã«ããããã«ãç§ã¯ãã¹ãŠãããè¯ããšã©ãŒã¡ãã»ãŒãžãšãç§ãã¡ãæã£ãŠãããšäž»åŒµããããè¯ããã¹ããæ±ããŠä¿ã¡ãŸãã ããããæéãéãããŠãããåPRã«ã¯ãå®è¡ãšã¬ãã¥ãŒã«æéãšåŽåãå¿
èŠã§ããåé¡ã¯ãã©ãã«åŽåãè²»ããã®ãæé©ããšããããšã§ãã
IMOã®å Žåãããšã©ãŒã¡ãã»ãŒãžã®æ¹åãã«çŠç¹ãåœãŠãããããã裞ã®pytestã®çºçãä¿®æ£ãããã«çŠç¹ãåœãŠãæ¹ã䟿å©ã§ãïŒãããŠããããå®è¡ããŠããéãããããããé©åã«ãã¹ãããŸãïŒã
ãŸããäžèšã®ç¹ããã®æŒç¿ã圹ç«ãŠãã®ã§ããã°ããã®åé¡ã®äžçªäžã«çœ®ãã®ã圹ç«ã€ãããã«ã€ããŠã®ããå ·äœçãªæ瀺ã ãšæããŸãã
ãããã远跡ããããã«ããã倧ããªåé¡ãäœæããããšã¯çã«ããªã£ãŠãããããããŸããïŒãã®ãããªåé¡ã«å«ãã䟡å€ã®ããä»ã®åé¡ã¯ãhttpsïŒ//github.com/pandas-dev/pandas/issues/19159ããã³https://github.com/pandas-ã§ãã dev / pandas / issues / 21575ïŒã
ãã®éšåèªäœã¯èªå·±å®çµåã§ãããåå¿è ã«ãšã£ãŠéåžžã«èŠªãã¿ããããã®ã§ãã
@gfyoungããªãããªã³ã¯ããŠãããããã®åé¡ã¯ããã®è°è«ã«ã©ã®ããã«é¢é£ããŠããŸããïŒ
@simonjayhawkinsããæ瀺çã«çŽ¹ä»ããã³ã¡ã³ãã«é¢é£ããŠããŸã
stata.py
äžèŽããªããã®ã1ã€å«ãŸããŠããŸãããã§èšã£ãŠããããã«https://github.com/pandas-dev/pandas/pull/31091#issuecomment-575422207ç§ã¯@jorisvandenbosscheã®èããæã£ãŠããŸããå€éšããã±ãŒãžããã®ãšã©ãŒã¡ãã»ãŒãžããã¹ãããªããšããèãã§ããããããããŒã¯ããã«ã¯ïŒ
ç¹å®ã®ãšã©ãŒã¡ãã»ãŒãžãæ¬åœã«ãã¹ãããããªãå ŽåïŒå ¬å¹³ãæãããã«å€éšã¡ãã»ãŒãžãã©ã¡ãã®æ¹æ³ã§ãå®è¡ã§ããŸãïŒã次ã®ãããªãã«ããŒé¢æ°ãäœæããå¿ èŠããããšæããŸãã
ãpythondef external_error_raisedïŒexpected_exceptionïŒïŒpytest.raisesïŒexpected_exceptionãmatch = NoneïŒãè¿ããŸãã
ããã«ãããããããã³ã以å€ã®ãšã©ãŒã§ããããšãå°æ¥çã«æããã«ãªãã match=None
ã¯ã裞ã®pytest
ã¬ã€ãºã®ããã«éçºãããªã³ãã£ã³ã°ãã§ãã¯ãåãããã®ã«åœ¹ç«ã¡ãŸãã
ç¹å®ã®ãšã©ãŒã¡ãã»ãŒãžãæ¬åœã«ãã¹ãããããªãå ŽåïŒå ¬å¹³ãæãããã«å€éšã¡ãã»ãŒãžãã©ã¡ãã®æ¹æ³ã§ãå®è¡ã§ããŸãïŒã次ã®ãããªãã«ããŒé¢æ°ãäœæããå¿ èŠããããšæããŸãã
def external_error_raised(expected_exception): return pytest.raises(expected_exception, match=None)
ããã«ãããããããã³ã以å€ã®ãšã©ãŒã§ããããšãå°æ¥çã«æããã«ãªãã
match=None
ã¯ã裞ã®pytest
ã¬ã€ãºã®ããã«éçºãããªã³ãã£ã³ã°ãã§ãã¯ãåãããã®ã«åœ¹ç«ã¡ãŸãã
+1
ã
ç§ã¯ãã®ã¢ã€ãã¢ãæ¬åœã«å¥œãã§ãããããç§ãã¡ã®ãã¹ãã®æ £ç¿ã«ããããšãã§ããŸããïŒ
é¢æ°/ã¡ãœããããšã©ãŒãçºçãããŠãããã©ãããé¢æ°ããã¹ãããŠããŠããã®ãšã©ãŒãå€éšãšã©ãŒã§ããå Žåã¯ãåã«match=None
ã "pytest.raises```ã«å
¥ããŸãã
ãã¹ãã®æ £äŸã«ããããšã¯ã§ããŸããïŒ
ã€ãŸããå¯çš¿ã¬ã€ãã«ã»ã¯ã·ã§ã³ã眮ãããšãæå³ã
é¢æ°/ã¡ãœããããšã©ãŒãçºçãããŠãããã©ãããé¢æ°ããã¹ãããŠããŠããã®ãšã©ãŒãå€éšãšã©ãŒã§ããå Žåã¯ãåã«ãpytest.raisesãã«match = Noneãå ¥åããŸãã
ãã«ããŒé¢æ°ãè¿œå ããããšãèããå¿ èŠããªãã®ã§ããã«ããŒé¢æ°ã®æ¹ããããšæããŸãã ãŸãããã«ããŒåã¯ããªããããè¡ã£ãŠããã®ãã«ã€ããŠã¯ããã«æ確ã§ãã
ç¹å®ã®ãšã©ãŒã¡ãã»ãŒãžãæ¬åœã«ãã¹ãããããªãå ŽåïŒå ¬å¹³ãæãããã«å€éšã¡ãã»ãŒãžãã©ã¡ãã®æ¹æ³ã§ãå®è¡ã§ããŸãïŒã次ã®ãããªãã«ããŒé¢æ°ãäœæããå¿ èŠããããšæããŸãã
def external_error_raised(expected_exception): return pytest.raises(expected_exception, match=None)
ããã«ãããããããã³ã以å€ã®ãšã©ãŒã§ããããšãå°æ¥çã«æããã«ãªãã
match=None
ã¯ã裞ã®pytest
ã¬ã€ãºã®ããã«éçºãããªã³ãã£ã³ã°ãã§ãã¯ãåãããã®ã«åœ¹ç«ã¡ãŸãã
@gfyoungãã®ãã«ããŒé¢æ°ãã©ãã«çœ®ãããšããå§ãããŸããïŒ ïŒã©ã®ãã¡ã€ã«ã«ãããã®ããã«ïŒïŒ
pandas._testing
ããã«ã¡ã¯ã
ç§ã¯åãçµã¿ããã§ãïŒ
pandas / tests / arrays / interval / test_ops.py
pandas / tests / arrays / test_array.py
pandas / tests / arrays / test_boolean.py
ããã«ã¡ã¯-ç§ã¯åãçµã¿ãããšæããŸãïŒ
pandas / tests / arithmetic / test_period.py
pandas / tests / arithmetic / test_timedelta64.py
ã¿ãªãããããã«ã¡ã¯ãç§ã¯æ¬¡ã®ããšãããŸãã
ãã³ã/tests/computation/test_compat.py
pandas / tests / Computing / test_eval.py
pandas / tests / dtypes / cast / test_upcast.py
pandas / tests / dtypes / test_dtypes.py
@MomIsBestFriendããã¯ãã§ã«å®äºããŠããŸãããå®äºãšããŠããŒã¯ãããŠããŸããïŒ
pandas / tests / arithmetic / test_numeric.py
@MomIsBestFriendããããïŒ
pandas / tests / arithmetic / test_period.py
pandas / tests / arrays / test_integer.py
pandas / tests / arrays / test_period.py
ãããã¯ïŒ31852ã«å«ãŸããŠããŸã
pandas / tests / extension / decimal / test_decimal.py
pandas / tests / extension / json / test_json.py
pandas / tests / extension / test_boolean.py
pandas / tests / extension / test_categorical.py
pandas / tests / frame / indexing / test_categorical.py
pandas / tests / frame / indexing / test_indexing.py
pandas / tests / frame / indexing / test_where.py
pandas / tests / frame / methods / test_explode.py
pandas / tests / frame / methods / test_isin.py
pandas / tests / frame / methods / test_quantile.py
pandas / tests / frame / methods / test_round.py
pandas / tests / frame / methods / test_sort_values.py
pandas / tests / frame / methods / test_to_dict.py
ç§ãããã
pandas / tests / io / excel / test_readers.py
pandas / tests / io / excel / test_writers.py
pandas / tests / io / excel / test_xlwt.py
pandas / tests / io / formats / test_format.py
pandas / tests / io / formats / test_style.py
pandas / tests / io / formats / test_to_latex.py
@MomIsBestFriend
ãããã¯ããŒã¯ãªãã§è¡ãããŸãïŒ
pandas / tests / indexes / datetimes /test_tools.pyã¯ååšããŸãã
ãããŸãïŒ
å
ã®æçš¿ãæŽæ°ããŸãããããã§ã裞ã®pytest raises
ãæ€åºããã¹ã¯ãªãããã§ããŸãããããã§ã質åãããå Žåã¯ããã®äœ¿çšæ¹æ³ã®èª¬æãå«ããŸããã
ç§ããããã
pandas / tests / arithmetic / test_timedelta64.py
pandas / tests / scalar / timestamp / test_arithmetic.py
pandas / tests / scalar / timestamp / test_comparisons.py
pandas / tests / scalar / timestamp / test_constructors.py
pandas / tests / scalar / timestamp / test_timezones.py
pandas / tests / scalar / timestamp / test_unary_ops.py
pandas / tests / scalar / timestamp /ã®ãã¹ãŠã®ãã¹ãã¯ãã§ã«ä¿®æ£ãããŠããããã§ãã
$ git checkout master
Already on 'master'
$ python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/scalar/timestamp/
$
pandas / tests / arrays / test_boolean.py =>ããããŸããã
ç§ãåã£ãŠãã
pandas / tests / arrays / interval / test_ops.py
pandas / tests / arrays / test_datetimelike.py
pandas / tests / groupby / test_categorical.py
pandas / tests / groupby / test_groupby.py
pandas / tests / groupby / test_timegrouper.py
pandas / tests / arithmetic / test_timedelta64.py =>ïŒ33010
pandas / tests / scalar / timestamp / test_arithmetic.py =>åé¡ãªã
pandas / tests / scalar / timestamp / test_comparisons.py =>åé¡ãªã
pandas / tests / scalar / timestamp / test_constructors.py =>åé¡ãªã
pandas / tests / scalar / timestamp / test_timezones.py =>åé¡ãªã
pandas / tests / scalar / timestamp / test_unary_ops.py =>åé¡ãªã
pandas / tests / arrays / test_boolean.py =>ããããŸããã
pandas / tests / arrays / interval / test_ops.py =>ïŒ33010
pandas / tests / arrays / test_datetimelike.py =>ïŒ33010
pandas / tests / groupby / test_categorical.py =>ïŒ33144
pandas / tests / groupby / test_groupby.py =>åé¡ãªã
pandas / tests / groupby / test_timegrouper.py =>åé¡ãªã
pandas / tests / indexes / category / test_category.py =>åé¡ãªã
pandas / tests / indexes / common.pyïŒ33144
pandas / tests / indexes / datetimelike.pyïŒ33144
pandas / tests / indexes / interval / test_astype.py =>圱é¿ãåãããã¹ãŠã®ãã¹ãã¯xfailedãšããŠããŒã¯ãããŠããŸããããŸã ä¿®æ£ããå¿ èŠããããŸããïŒ
pandas / tests / indexes / multi / test_compat.pyïŒ33144
pandas / tests / indexes / multi / test_duplicates.py =>åé¡ãªã
pandas / tests / indexes / multi / test_format.py =>ãã¡ã€ã«ãèŠã€ãããŸããã
pandas / tests / indexes / multi / test_reshape.pyïŒ33144
pandas / tests / indexes / multi / test_setops.py =>åé¡ãªã
pandas / tests / indexes / multi / test_sorting.pyïŒ33144
@ sumanau7䜿çšããŠãããã¡ã€ã«ããªã¹ãããŸãããïŒ ç§ã¯ããªããããŒãžãããšæããã¡ã€ã«ã®ããã€ãã«åãçµãã§ããŸãã
ã§è¡ã£ã
pandas/tests/indexes/categorical/test_category.py
pandas/tests/indexes/period/test_constructors.py
pandas/tests/indexes/period/test_join.py
pandas/tests/indexes/period/test_partial_slicing.py
pandas/tests/indexes/period/test_setops.py
pandas/tests/indexes/timedeltas/test_delete.py
ç§ã¯äžç·ã«åããŠããŸã
pandas / tests / indexes / ranges / test_constructors.py
pandas / tests / indexes / ranges / test_range.py
pandas / tests / indexing / multiindex / test_chaining_and_caching.py
pandas / tests / indexing / multiindex / test_partial.py
pandas / tests / series / indexing / test_alter_index.py
pandas / tests / arrays / boolean / test_function.py
åãããã£ãŠããïŒ
pandas/tests/reshape/merge/test_multi.py
ç§ããããïŒ
pandas / tests / window / moments / test_moments_ewm.py
pandas / tests / window / moments / test_moments_rolling.py
pandas / tests / window / test_dtypes.py
pandas / tests / window / test_ewm.py
pandas / tests / window / test_expanding.py
pandas / tests / window / test_timeseries_window.py
ãŸãåãïŒ
ããã
ç§ã¯ãããžã§ã¯ãã®æ°ããéçºè
ã§ããããããæ¯æŽããããšæããŸãã æ®ãã®ãã¹ãã®ãã¡ãåå¿è
ã«æé©ãªãã®ã¯ã©ãã§ããïŒ
ããããšãã
ã±ãã³
ããã
ç§ã¯ãããžã§ã¯ãã®æ°ããéçºè ã§ããããããæ¯æŽããããšæããŸãã æ®ãã®ãã¹ãã®ãã¡ãåå¿è ã«æé©ãªãã®ã¯ã©ãã§ããïŒããããšãã
ã±ãã³
ãããã-ãããã®ã©ãããä»ã®ã©ããããç°¡åã§ãé£ãããã®ã§ããªããšæããŸããã©ããå§ããã®ã«è¯ãå Žæã§ããã
validate_unwanted_paââtterns.pyã¹ã¯ãªããã®å®è¡äžã«ãšã©ãŒãçºçããŸãã
Traceback (most recent call last):
File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 397, in <module>
main(
File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 352, in main
for line_number, msg in function(file_obj):
File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 88, in bare_pytest_raises
contents = file_obj.read()
File "C:\Program Files (x86)\Python\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 76843: character maps to <undefined>
'pandas / tests /test_strings.py'ãèªã¿åããšãã«çºçããŸãããã¹ãŠã®ãã¡ã€ã«ã¯cp1252ãšããŠãšã³ã³ãŒããããŸãã
ã¹ã¯ãªãããå®è¡ããŠãäœæ¥ã®éè€ãé¿ããããã«ããŸã å®äºããŠããªããã¹ããå確èªããããšæããŸããã
ã»ãšãã©ã®NotImplementedError
ã¯ãäžèŽããç¹å®ã®ã¡ãã»ãŒãžããããŸãããç®çã«åããããšã¯ããã£ãŠããŸããããªã³ã¿ãŒãæ²é»ãããããã«ãããããpytest.raises(NotImplementedError, match=None)
ã«å€æŽããããšããå§ãããŸãã ïŒ
ç§ããããïŒ
å§ããããšã
-ã±ãã³
ç§ã¯ããã«äžæ £ããªã®ã§ãããããå§ããŸãïŒ
ããã«ã¡ã¯ãç§ã¯è²¢ç®ããã®ã¯åããŠã§ãã ãã®åé¡ã®æ確ãªèšè¿°ã«æè¬ããŸãã pandas/tests/generic/test_duplicate_labels.py
ãåãããšããå§ããããŸããã£ããããå°ãåãçµã¿ãŸãã
ãŸãã¯pandas / tests / arrays /test_datetimelike.pyãåãäžããŸãã
ãŸãã python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/
æ£åžžã«å®è¡ã§ããªãå Žåã¯ã
代ããã«python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/**/*.py
ä»ãããå®è¡ããæãç°¡åãªæ¹æ³ã¯ãè¿œå ããããšã§ã
- id: unwanted-patterns-bare-pytest-raises
name: Check for use of bare use of pytest raises
language: python
entry: python scripts/validate_unwanted_patterns.py --validation-type="bare_pytest_raises"
types: [python]
files: ^pandas/tests/
- repo: local
ã»ã¯ã·ã§ã³ã®.pre-commit-config.yaml
ããŠããã
pre-commit run unwanted-patterns-bare-pytest-raises --all-files.
æ®ãã®æªåŠçã®ãã¡ã€ã«ã§åé¡ãæŽæ°ããŸãã
ç§ã¯ããããåãããšãã§ããŸãïŒ
ãããã¯ãä»æ¥ã®ãªã¹ãã®ããã5ã§ãã
@marktgrahamãŸã test_datetime.py
å®è¡ããŠããªãå Žåã PRãããããšããŠããã®ã§æŸã£ãŠãããŠãã ãã
@ liaoaoyuan97å¿é
ãããŸãããç§ã¯ãŸã test_datetimelike.py
觊ããŠããŸããã
代ããã«pandas / tests / extension / base /getitem.pyã䜿çšããŸãã
validate_unwanted_patterns.py
ã¯ç§ã®åŽã§ãšã©ãŒãçºçãããŸã
$ python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/
Traceback (most recent call last):
File "scripts/validate_unwanted_patterns.py", line 479, in <module>
output_format=args.format,
File "scripts/validate_unwanted_patterns.py", line 435, in main
with open(file_path, encoding="utf-8") as file_obj:
IsADirectoryError: [Errno 21] Is a directory: 'pandas/tests/'
ããããïŒ37419ã«é¢é£ããŠããããã§ããïŒ
@MarcoGorelliã«ãã£ãŠææ¡ãããã¢ãããŒããè©ŠããŠã¿ãŠãå®ç§ã«æ©èœããŸããã
ä»ãããå®è¡ããæãç°¡åãªæ¹æ³ã¯ãè¿œå ããããšã§ã
- id: unwanted-patterns-bare-pytest-raises name: Check for use of bare use of pytest raises language: python entry: python scripts/validate_unwanted_patterns.py --validation-type="bare_pytest_raises" types: [python] files: ^pandas/tests/
- repo: local
ã»ã¯ã·ã§ã³ã®.pre-commit-config.yaml
ããŠãããpre-commit run unwanted-patterns-bare-pytest-raises --all-files.
ããã.pre-commit-config.yaml
ã«è¿œå ããŠããããã®ã¹ã¬ããã®æé ãæŽæ°ããã®ã¯çã«ããªã£ãŠããŸããïŒ
ããã.pre-commit-config.yamlã«è¿œå ããŠããããã®ã¹ã¬ããã®æé ãæŽæ°ããã®ã¯çã«ããªã£ãŠããŸããïŒ
çºçãããã¹ãŠã®ãšã©ãŒãä¿®æ£ããããã .pre-commit-config.yaml
è¿œå ããŸããã¯ã
ããããïŒ37419ã«é¢é£ããŠããããã§ããïŒ
ããããããã¯ïŒ37379ã«é¢é£ããŠããŸãïŒãã®ã¹ã¯ãªãããpre-commitã«ç§»åããããããã£ã¬ã¯ããªã§å®è¡ããå¿ èŠããªããªããŸããïŒ