Pandas: [Masalah pertama yang bagus] TST: Larang bare pytest.raises

Dibuat pada 14 Jan 2020  ·  51Komentar  ·  Sumber: pandas-dev/pandas

Pengguna akhir mengandalkan pesan kesalahan untuk tujuan debugging mereka. Oleh karena itu, penting bagi kami untuk memastikan bahwa pesan kesalahan yang benar ditampilkan tergantung pada kesalahan yang dipicu.

Ide intinya adalah untuk mengonversi ini:

with pytest.raises(klass):
    # Some code that raise an error

Untuk ini:

with pytest.raises(klass, match=msg):
    # Some code that raise an error

Anda dapat membaca lebih lanjut tentang pytest.raises sini .


Catatan samping:

Jika pesan kesalahan yang muncul adalah pesan kesalahan eksternal (artinya itu tidak khusus untuk panda), Anda harus menggunakan external_error_raised daripada pytest.raises .

penggunaan external_error_raised adalah __tepat__ seperti pytest.raises satu-satunya perbedaan adalah Anda tidak meneruskan argumen match .

Sebagai contoh:

import pandas._testing as tm

def test_foo():
    with tm.external_error_raised(ValueError):
        raise ValueError("foo")

Catatan utama:

  • Jangan lupa untuk menautkan masalah ini di PR Anda, tempel ini
https://github.com/pandas-dev/pandas/issues/30999

dalam PR Anda.

  • Silahkan komentar apa yang akan Anda kerjakan, jadi kami tidak akan melakukan pekerjaan ganda (tidak perlu menyebutkan saya, Anda bisa menyatakan apa yang Anda rencanakan untuk dikerjakan, ingatlah untuk memeriksa apakah ada sesuatu yang sudah diambil).

  • Jika file/file yang seharusnya ditandai sebagai "selesai" (seolah-olah tidak ada lagi pekerjaan yang harus dilakukan), tidak ditandai sebagai "selesai", beri komentar beri tahu saya tentang itu (Dan sebutkan saya dengan meletakkan @MomIsBestFriend di badan komentar, jadi saya akan tahu di mana mencarinya).


Untuk membuat daftar lengkap sendiri, Anda dapat menjalankan:

python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/

Anda juga dapat menjalankannya terhadap satu file seperti:

python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/PATH/TO/SPECIFIC/FILE.py

Jika file berisi pytest.raises kosong, skrip akan menampilkan yang berikut:

pandas/tests/arithmetic/test_numeric.py:553:Bare pytests raise have been found. Please pass in the argument 'match' as well the exception

Artinya pada pandas/tests/arithmetic/test_numeric.py pada baris 553 ada pytest.raises kosong


Daftar saat ini adalah:

  • [x] pandas/tests/io/pytables/test_timezones.py
  • [ ] pandas/tests/generic/methods/test_pipe.py
  • [ ] pandas/tests/reshape/merge/test_merge_asof.py
  • [ ] pandas/tests/extension/base/reduce.py
  • [x] pandas/tests/arrays/test_datetimelike.py
  • [ ] pandas/tests/extension/test_boolean.py
  • [ ] pandas/tests/extension/base/getitem.py
  • [ ] pandas/tests/arrays/boolean/test_arithmetic.py
  • [ ] pandas/tests/extension/base/setitem.py
  • [ ] pandas/tests/indexes/interval/test_astype.py
  • [ ] pandas/tests/io/parser/test_network.py
  • [ ] pandas/tests/extension/test_integer.py
  • [ ] pandas/tests/indexing/multiindex/test_partial.py
  • [ ] pandas/tests/io/parser/test_python_parser_only.py
  • [ ] pandas/tests/io/test_html.py
  • [ ] pandas/tests/reductions/test_stat_reductions.py
  • [ ] pandas/tests/dtypes/test_inference.py
  • [ ] pandas/tests/plotting/test_hist_method.py
  • [ ] pandas/tests/series/apply/test_series_apply.py
  • [ ] pandas/tests/io/excel/test_xlrd.py
  • [ ] pandas/tests/indexes/test_common.py
  • [ ] pandas/tests/util/test_assert_series_equal.py
  • [ ] pandas/tests/extension/base/ops.py
  • [ ] pandas/tests/io/test_clipboard.py
  • [ ] pandas/tests/plotting/frame/test_frame_color.py
  • [ ] pandas/tests/window/moments/test_moments_ewm.py
  • [ ] pandas/tests/io/test_gbq.py
  • [ ] pandas/tests/reductions/test_reductions.py
  • [ ] pandas/tests/io/test_feather.py
  • [ ] pandas/tests/resample/test_resampler_grouper.py
  • [ ] pandas/tests/indexes/multi/test_indexing.py
  • [ ] pandas/tests/io/test_common.py
  • [ ] pandas/tests/io/test_sql.py
  • [ ] pandas/tests/plotting/test_series.py
  • [ ] pandas/tests/io/test_fsspec.py
  • [ ] pandas/tests/extension/test_floating.py
  • [ ] pandas/tests/indexes/multi/test_setops.py
  • [ ] pandas/tests/reshape/test_get_dummies.py
  • [ ] pandas/tests/plotting/frame/test_frame_subplots.py
  • [ ] pandas/tests/plotting/test_backend.py
  • [ ] pandas/tests/generic/methods/test_sample.py
  • [ ] pandas/tests/plotting/test_boxplot_method.py
  • [ ] pandas/tests/io/test_parquet.py
  • [ ] pandas/tests/extension/test_string.py
  • [ ] pandas/tests/io/pytables/test_complex.py
  • [ ] pandas/tests/indexes/test_numpy_compat.py
  • [ ] pandas/tests/io/test_gcs.py
  • [ ] pandas/tests/io/sas/test_sas7bdat.py
  • [ ] pandas/tests/window/test_apply.py
  • [ ] pandas/tests/series/test_ufunc.py
  • [ ] pandas/tests/plotting/frame/test_frame.py
  • [ ] pandas/tests/reshape/test_union_categoricals.py
  • [ ] pandas/tests/io/json/test_ujson.py
  • [ ] pandas/tests/indexing/test_coercion.py
  • [ ] pandas/tests/io/pytables/test_store.py
  • [ ] pandas/tests/computation/test_compat.py
  • [ ] pandas/tests/io/json/test_pandas.py
  • [ ] pandas/tests/io/json/test_json_table_schema.py

    - [ ] pandas/tests/scalar/test_nat.py

CATATAN:

Daftar dapat berubah karena file dipindahkan/diganti namanya terus-menerus.


Mengambil hampir semuanya dari #23922, yang awalnya dibuka oleh @gfyoung.

Style Testing good first issue

Semua 51 komentar

saya akan mengambil:

  • [x] pandas/tests/test_common.py
  • [x] pandas/tests/test_downstream.py
  • [x] pandas/tests/test_errors.py
  • [x] pandas/tests/test_lib.py
  • [x] pandas/tests/test_take.py
  • [x] pandas/tests/internals/test_internals.py
  • [x] pandas/tests/window/test_rolling.py

Saya akan mulai mengerjakan:

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 Saya harap ini akan membantu Anda :)

(Angka mewakili nomor baris)

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 daftar itu tidak dibuat oleh grep -r -e "pytest.raises([a-zA-Z]*)" pandas/tests -l sebenarnya, itu dibuat oleh skrip di #30755 (tipe validasi yang disebut bare_pytest_raises ), saya akan meletakkan instruksi di badan masalah, sekali itu akan digabungkan :senyum:

@MomIsBestFriend Saya akan membantu dengan:
pandas/tests/base/test_constructors.py
pandas/tests/base/test_ops.py

Saya bisa mengurus ini:
@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 ada beberapa diskusi di https://github.com/pandas-dev/pandas/issues/23922 tentang hal ini. Karena untuk mengulangi seperti yang saya katakan di sana: Saya tidak berpikir kita harus "secara membabi buta" menegaskan semua pesan kesalahan.

Beberapa hal yang dikatakan di utas itu: batasi pada pesan kesalahan internal, batasi kecocokan dengan beberapa kata kunci dari pesan, hindari pola yang rumit.

Juga, saya pikir menegaskan pesan kesalahan harus berjalan seiring dengan benar-benar memeriksa apakah itu pesan kesalahan yang baik dan jelas, dan berpotensi meningkatkan ini.

Mungkin baik untuk menyaring daftar poin perhatian dari diskusi di edisi lain untuk diletakkan di sini.

@jorisvandenbossche

@MomIsBestFriend ada beberapa diskusi di #23922 tentang hal ini. Karena untuk mengulangi seperti yang saya katakan di sana: Saya tidak berpikir kita harus "secara membabi buta" menegaskan semua pesan kesalahan.

Saya sepenuhnya setuju, tetapi masalahnya adalah pendatang baru tidak tahu pesan kesalahan apa yang harus ditegaskan dan pesan kesalahan apa yang tidak boleh ditegaskan, jika kita entah bagaimana menentukan aturan tentang pesan kesalahan apa yang harus ditegaskan dan apa yang tidak, dan pada saat yang sama menjaga masalah ini "ramah pemula", itu akan menjadi hebat (IMO).

Juga, jika kami berencana untuk menerapkan ini di CI, kami perlu menandai apa bare pytest raises sengaja "telanjang" (komentar IMO dengan gaya isort: skip sudah cukup), dan juga lainnya orang akan tahu bahwa bare pytest raise sengaja dibuat.

Beberapa hal yang dikatakan di utas itu: batasi pada pesan kesalahan internal, batasi kecocokan dengan beberapa kata kunci dari pesan, hindari pola yang rumit.

Saya tidak mengerti mengapa kami tidak ingin menguji pesan kesalahan internal, dapatkah Anda menjelaskan lebih lanjut?

Saya melihat poin yang Anda tunjukkan di https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458551763 , dan saya +1 tentang itu, tapi saya +2 (jika itu masuk akal) di https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458733117 dan https://github.com/pandas-dev/pandas/issues/ 23922#issuecomment -458735169 karena IMO manfaatnya lebih besar daripada biayanya.

Juga, saya pikir menegaskan pesan kesalahan harus berjalan seiring dengan benar-benar memeriksa apakah itu pesan kesalahan yang baik dan jelas, dan berpotensi meningkatkan ini.

Sangat setuju.

Mungkin baik untuk menyaring daftar poin perhatian dari diskusi di edisi lain untuk diletakkan di sini.

Saya telah membaca percakapan di #23922, tetapi saya tidak melihat apa pun yang layak dimasukkan IMO sebagai "catatan" di badan masalah, dapatkah Anda menunjukkan hal-hal yang saya lewatkan?

Saya telah membaca percakapan di #23922, tetapi saya tidak melihat apa pun yang layak dimasukkan IMO sebagai "catatan" di badan masalah, dapatkah Anda menunjukkan hal-hal yang saya lewatkan?

Saya juga tidak melihat banyak hal lain untuk ditambahkan dari masalah itu.

Saya sepenuhnya setuju, tetapi masalahnya adalah pendatang baru tidak tahu pesan kesalahan apa yang harus ditegaskan dan pesan kesalahan apa yang tidak boleh ditegaskan, jika kita entah bagaimana menentukan aturan tentang pesan kesalahan apa yang harus ditegaskan dan apa yang tidak, dan pada saat yang sama menjaga masalah ini "ramah pemula", itu akan menjadi hebat (IMO).

Juga, jika kami berencana untuk menerapkan ini di CI, kami perlu entah bagaimana menandai kenaikan pytest apa yang "telanjang" dengan sengaja (komentar IMO dengan gaya isort: lewati sudah cukup), dan juga agar orang lain tahu bahwa kenaikan pytest telanjang sengaja dilakukan.

Ini adalah sebagian alasan mengapa memilih dan memilih mana yang akan diuji dan mana yang tidak untuk diuji bukanlah arah yang saya inginkan. Saya juga akan menambahkan bahwa kami terkadang memeriksa string pesan kesalahan di blok except , jadi pesan kesalahan yang baik juga bermanfaat bagi kami selama pengembangan.

Juga, jika pesan "internal" ini tidak begitu penting, mengapa kita memiliki pesan kesalahan? Saya kemudian hanya akan membuat pembantu yang kemudian menegaskan pesan itu kosong.

Saya tidak mengerti mengapa kami tidak ingin menguji pesan kesalahan internal, dapatkah Anda menjelaskan lebih lanjut?

Jadi saya katakan "batas untuk pesan kesalahan internal", sementara "internal" bisa sedikit ambigu... Maksud saya: pesan kesalahan yang berasal dari panda itu sendiri, dan tentu saja kami ingin mengujinya. Tapi jadi maksud saya bahwa kita (IMO) tidak boleh menguji terlalu banyak pesan kesalahan eksternal , artinya: pesan yang berasal dari misalnya numpy atau perpustakaan lain. Numpy dapat mengubahnya, dan kemudian pengujian kami mulai gagal karena perubahan kosmetik pada numpy (dan ini bukan hipotetis, saya pikir itu terjadi minggu lalu).

Sekarang, saya menggunakan "internal" dalam konteks yang berbeda di https://github.com/pandas-dev/pandas/pull/30998#discussion_r366726966. Di sana, maksud saya sebagai pesan kesalahan internal yang berorientasi pengembang yang tidak boleh dimunculkan ke pengguna. IMO, itu tidak penting untuk diuji persis dengan pesan kesalahan.

Saya melihat poin yang Anda tunjukkan di #23922 (komentar), dan saya memberi +1 pada itu, tetapi saya +2 ​​(jika itu masuk akal) pada #23922 (komentar) dan #23922 (komentar) karena IMO manfaatnya lebih besar daripada biayanya.

Mari kita beri komentar @simonjayhawkins yang Anda tautkan di sini:

Saya sedang mengerjakan asumsi, mungkin salah, bahwa itu akan bermanfaat untuk

  1. mengidentifikasi tes yang dapat diparametrikan
  2. mengidentifikasi tes yang harus dibagi
  3. pemahaman yang lebih baik tentang mode kegagalan yang diuji
  4. secara tidak langsung menambahkan lebih banyak dokumentasi ke tes
  5. mengidentifikasi di mana pesan kesalahan bisa lebih konsisten
  6. mengidentifikasi tes yang berlebihan
  7. membantu meningkatkan pesan kesalahan
  8. mengidentifikasi tes yang sedang lulus untuk alasan yang salah.

Itu semua hal yang berguna, saya setuju sepenuhnya. Tapi itu tidak sederhana, dan jika kita ingin menyelesaikan masalah ini, maka masalah ini bukan untuk pemula. Tentu saja, pemula tidak perlu melakukan semua hal itu sekaligus, tetapi saya masih merasa bahwa PR yang menambahkan pernyataan sering kali agak mirip dengan "menambahkan pesan kesalahan saat ini secara membabi buta ke panggilan pytest.raises" tanpa melakukan apa pun lebih lanjut (poin di atas).

Juga, jika poin-poin di atas adalah yang membuat latihan ini bermanfaat, saya pikir itu adalah instruksi yang lebih konkret tentang ini yang berguna untuk diletakkan di atas masalah ini.


Untuk lebih jelasnya, saya mendukung pesan kesalahan yang lebih baik dan pengujian yang lebih baik yang menyatakan bahwa kami memiliki dan menyimpan pesan kesalahan itu dengan baik. Tetapi kami juga memiliki waktu yang terbatas, dan setiap PR membutuhkan waktu dan upaya untuk melakukan dan meninjau, dan pertanyaannya adalah di mana upaya terbaik dihabiskan.
IMO, akan lebih berguna daripada fokus pada "perbaiki kenaikan pytest telanjang" daripada fokus pada "perbaiki pesan kesalahan" (dan saat melakukan ini, lebih baik uji mereka).

Juga, jika poin-poin di atas adalah yang membuat latihan ini bermanfaat, saya pikir itu adalah instruksi yang lebih konkret tentang ini yang berguna untuk diletakkan di atas masalah ini.

Mungkin masuk akal untuk membuat masalah yang lebih besar untuk melacak ini (masalah lain yang layak dimasukkan dalam masalah seperti itu adalah https://github.com/pandas-dev/pandas/issues/19159 dan https://github.com/pandas- dev/pandas/isu/21575).

Bagian ini sendiri sudah lengkap dan sangat mudah didekati oleh pemula.

@gfyoung bagaimana masalah yang Anda tautkan terkait dengan diskusi ini?

Mereka berhubungan dengan komentar yang Anda perkenalkan secara eksplisit dari @simonjayhawkins

31072 berisi satu kecocokan yang hilang di stata.py

Seperti yang dikatakan di sini https://github.com/pandas-dev/pandas/pull/31091#issuecomment -575422207 Saya setuju dengan ide @jorisvandenbossche , bahwa kami tidak akan menguji pesan kesalahan dari paket eksternal, Ada ide tentang caranya untuk menandai mereka?

Jika kita benar-benar tidak ingin menguji pesan kesalahan tertentu (saya bisa memilih yang eksternal agar adil), saya pikir kita harus membuat fungsi pembantu seperti ini:

~pythondef external_error_raised(expected_exception):kembalikan pytest.raises(expected_exception, match=None)~

Ini akan menjelaskan kepada diri kita di masa depan bahwa ini adalah kesalahan non-panda, dan match=None berfungsi untuk menenangkan setiap pemeriksaan linting yang kami kembangkan untuk kenaikan pytest .

Jika kita benar-benar tidak ingin menguji pesan kesalahan tertentu (saya bisa memilih yang eksternal agar adil), saya pikir kita harus membuat fungsi pembantu seperti ini:

def external_error_raised(expected_exception):
   return pytest.raises(expected_exception, match=None)

Ini akan menjelaskan kepada diri kita di masa depan bahwa ini adalah kesalahan non-panda, dan match=None berfungsi untuk menenangkan setiap pemeriksaan linting yang kami kembangkan untuk kenaikan pytest .

+1 untuk itu.

Saya sangat menyukai ide itu, dapatkah kita menjadikannya konvensi untuk pengujian kita?

Bahwa jika suatu fungsi sedang menguji apakah suatu fungsi/metode memunculkan kesalahan, dan kesalahan itu adalah kesalahan eksternal, kita cukup memasukkan match=None di "pytest.raises```.

bisakah kita menjadikannya konvensi untuk pengujian kita?

Maksud saya menempatkan bagian di dalam panduan Berkontribusi .

Bahwa jika suatu fungsi sedang menguji apakah suatu fungsi/metode memunculkan kesalahan, dan kesalahan itu adalah kesalahan eksternal, kita cukup meletakkan match=None di "pytest.raises```.

Saya lebih suka fungsi pembantu karena Anda tidak perlu berpikir untuk menambahkannya. Juga, nama pembantu jauh lebih jelas mengapa kami melakukannya.

Jika kita benar-benar tidak ingin menguji pesan kesalahan tertentu (saya bisa memilih yang eksternal agar adil), saya pikir kita harus membuat fungsi pembantu seperti ini:

def external_error_raised(expected_exception):
   return pytest.raises(expected_exception, match=None)

Ini akan menjelaskan kepada diri kita di masa depan bahwa ini adalah kesalahan non-panda, dan match=None berfungsi untuk menenangkan setiap pemeriksaan linting yang kami kembangkan untuk kenaikan pytest .

@gfyoung di mana Anda merekomendasikan meletakkan fungsi pembantu ini? (seolah-olah dalam file apa?)

pandas._testing

Halo,

Saya ingin bekerja pada:

pandas/tests/arrays/interval/test_ops.py
pandas/tests/arrays/test_array.py
pandas/tests/arrays/test_boolean.py

Halo - Saya ingin mengerjakan:

pandas/tests/arithmetic/test_period.py
pandas/tests/arithmetic/test_timedelta64.py

Halo semua, saya akan mengambil yang berikut:

pandas/tests/computation/test_compat.py
pandas/tests/computation/test_eval.py
pandas/tests/dtypes/cast/test_upcast.py
pandas/tests/dtypes/test_dtypes.py

@MomIsBestFriend yang ini sudah selesai tetapi belum ditandai sebagai selesai:
pandas/tests/arithmetic/test_numeric.py

MEMPERBARUI

@MomIsBestFriend ini juga:
pandas/tests/arithmetic/test_period.py
pandas/tests/arrays/test_integer.py
pandas/tests/arrays/test_period.py

Ini termasuk dalam #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

saya akan mengambil

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
Yang ini dilakukan tanpa tanda:

  • pandas/tests/indexes/datetimes/test_astype.py

pandas/tests/indexes/datetimes/test_tools.py tidak ada

Aku akan melakukannya:

  • pandas/tests/indexes/datetimes/test_constructors.py
  • pandas/tests/indexes/datetimes/test_date_range.py
  • pandas/tests/indexes/datetimes/test_indexing.py
  • pandas/tests/indexes/datetimes/test_shift.py
  • pandas/tests/indexes/datetimes/test_timezones.py

Saya telah memperbarui posting asli, sekarang ada skrip untuk mendeteksi bare pytest raises Saya telah menyertakan instruksi tentang cara menggunakannya, jika ada yang masih memiliki pertanyaan, Anda dipersilakan untuk bertanya :)

saya akan mengambil,

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

sepertinya semua tes di pandas/tests/scalar/timestamp/ sudah diperbaiki.

$ 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 => tidak ada.

Saya mengambil
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 => tidak ada masalah
pandas/tests/scalar/timestamp/test_comparisons.py => tidak ada masalah
pandas/tests/scalar/timestamp/test_constructors.py => tidak ada masalah
pandas/tests/scalar/timestamp/test_timezones.py => tidak ada masalah
pandas/tests/scalar/timestamp/test_unary_ops.py => tidak ada masalah

pandas/tests/arrays/test_boolean.py => tidak ada.

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 => tidak ada masalah
pandas/tests/groupby/test_timegrouper.py => tidak ada masalah

pandas/tests/indexes/categorical/test_category.py => tidak ada masalah
pandas/tests/indexes/common.py #33144
pandas/tests/indexes/datetimelike.py #33144

pandas/tests/indexes/interval/test_astype.py => semua tes yang terpengaruh ditandai sebagai xfailed, apakah kita masih perlu memperbaikinya, jadi bagaimana?

pandas/tests/indexes/multi/test_compat.py #33144
pandas/tests/indexes/multi/test_duplicates.py => tidak ada masalah
pandas/tests/indexes/multi/test_format.py => file tidak ditemukan.
pandas/tests/indexes/multi/test_reshape.py #33144
pandas/tests/indexes/multi/test_setops.py => tidak ada masalah
pandas/tests/indexes/multi/test_sorting.py #33144

@ sumanau7 apakah Anda membuat daftar file yang Anda ambil? Saya sedang mengerjakan beberapa file yang saya lihat telah Anda gabungkan.

Selesai dengan

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

Saya bekerja dengan

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

Bekerja pada:

pandas/tests/reshape/merge/test_multi.py

saya akan mengambil:
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

Saya juga akan mengambil:

  • pandas/tests/frame/methods/test_assign.py
  • pandas/tests/frame/methods/test_at_time.py
  • pandas/tests/frame/methods/test_between_time.py
  • pandas/tests/frame/methods/test_first_and_last.py
  • pandas/tests/frame/methods/test_interpolate.py
  • pandas/tests/frame/methods/test_replace.py
  • pandas/tests/frame/test_query_eval.py

Hai,
Saya seorang pengembang baru untuk proyek ini dan saya ingin membantu dalam hal ini. Manakah dari tes yang tersisa yang terbaik untuk pemula?

Terima kasih,
Kevin

Hai,
Saya seorang pengembang baru untuk proyek ini dan saya ingin membantu dalam hal ini. Manakah dari tes yang tersisa yang terbaik untuk pemula?

Terima kasih,
Kevin

Selamat datang - Saya tidak berpikir semua ini lebih mudah atau lebih sulit daripada yang lain, apa pun akan menjadi tempat yang baik untuk memulai

Saya mendapatkan kesalahan saat menjalankan skrip validasi_unwanted_patterns.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>

Itu terjadi saat membaca 'pandas/tests/test_strings.py' Semua file dikodekan sebagai cp1252.

Saya ingin menjalankan skrip untuk memeriksa ulang tes mana yang masih belum selesai untuk menghindari duplikasi pekerjaan.

Sebagian besar NotImplementedError s tidak memiliki pesan khusus untuk dicocokkan, saya tahu itu agak mengalahkan tujuannya, tetapi apakah ide yang baik untuk mengubahnya menjadi pytest.raises(NotImplementedError, match=None) hanya untuk membungkam linter ?

saya akan mengambil:

  • pandas/tests/tools/test_to_datetime.py
  • pandas/tests/tseries/offsets/test_offsets.py

untuk memulai.

-Kevin

Saya baru dalam hal ini jadi akan mulai dengan ini:

  • pandas/tests/tseries/offsets/test_ticks.py

Halo, saya baru berkontribusi. Terima kasih atas tulisan yang jelas dalam masalah ini. Saya akan mulai dengan mengambil pandas/tests/generic/test_duplicate_labels.py , dan akan menangani lebih banyak lagi jika berhasil.

Saya akan menggunakan pandas/tests/arrays/test_datetimelike.py sebagai permulaan.
Juga, jika Anda tidak dapat menjalankan python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/ sukses, coba
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/**/*.py sebagai gantinya

Cara termudah untuk menjalankannya sekarang adalah dengan menambahkan

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

ke .pre-commit-config.yaml di bagian - repo: local , lalu jalankan

pre-commit run unwanted-patterns-bare-pytest-raises --all-files.

Saya telah memperbarui masalah dengan sisa file yang beredar

Saya dapat mengambil ini:

  • [x] pandas/tests/io/pytables/test_timezones.py
  • [ ] pandas/tests/generic/methods/test_pipe.py
  • [ ] pandas/tests/reshape/merge/test_merge_asof.py
  • [ ] pandas/tests/extension/base/reduce.py
  • [ ] pandas/tests/extension/base/getitem.py
  • pandas/tests/arrays/test_datetimelike.py

Ini adalah 5 teratas dalam daftar hari ini.

@marktgraham Jika Anda belum melakukan test_datetime.py . Tolong biarkan saja karena saya akan membuat PR

@liaoaoyuan97 jangan khawatir, saya belum menyentuh test_datetimelike.py .

Saya akan mengambil pandas/tests/extension/base/getitem.py sebagai gantinya.

validate_unwanted_patterns.py menimbulkan kesalahan di pihak saya

$ 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/'

Tampaknya terkait dengan #37419 mungkin?

Saya mencoba dengan pendekatan yang diusulkan oleh @MarcoGorelli dan bekerja dengan sempurna.

Cara termudah untuk menjalankannya sekarang adalah dengan menambahkan

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

ke .pre-commit-config.yaml di bagian - repo: local , lalu jalankan

pre-commit run unwanted-patterns-bare-pytest-raises --all-files.

Apakah masuk akal untuk menambahkan ini ke .pre-commit-config.yaml dan kemudian memperbarui instruksi di utas ini?

Apakah masuk akal untuk menambahkan ini ke .pre-commit-config.yaml dan kemudian memperbarui instruksi di utas ini?

Kami akan menambahkannya ke .pre-commit-config.yaml setelah semua kesalahan yang ditimbulkannya diperbaiki, ya

Tampaknya terkait dengan #37419 mungkin?

Tidak, ini terkait dengan #37379 (yaitu ketika kami memindahkan skrip ini ke pra-komit, oleh karena itu tidak lagi diperlukan untuk menjalankannya di direktori)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat