Pandas: [عدد أول جيد] TST: عدم السماح بعرش pytest.raises العاري

تم إنشاؤها على ١٤ يناير ٢٠٢٠  ·  51تعليقات  ·  مصدر: pandas-dev/pandas

يعتمد المستخدمون النهائيون على رسائل الخطأ لأغراض تصحيح الأخطاء الخاصة بهم. وبالتالي ، من المهم أن نتأكد من ظهور رسائل الخطأ الصحيحة بناءً على الخطأ الذي تم تشغيله.

الفكرة الأساسية هي تحويل هذا:

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 هو __تأكيد__ مثل 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

في العلاقات العامة الخاصة بك.

  • يرجى التعليق على ما تخطط للعمل عليه ، لذلك لن نقوم بمضاعفة العمل (لا داعي لذكرني ، يمكنك فقط التصريح بما تخطط للعمل عليه ، فقط تذكر أن تتحقق مما إذا تم أخذ شيء ما بالفعل).

  • إذا لم يتم وضع علامة "تم" على الملف / الملفات التي يجب وضع علامة عليها كـ "تم" (كما لو لم يكن هناك المزيد من العمل الذي يتعين القيام به) ، فيرجى التعليق لإعلامني بذلك (وذكرني عن طريق وضع @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


القائمة الحالية هي:

  • [x] الباندا / الاختبارات / io / pytables / test_timezones.py
  • [] الباندا / الاختبارات / العامة / الأساليب / test_pipe.py
  • [] الباندا / الاختبارات / إعادة تشكيل / دمج / test_merge_asof.py
  • [] الباندا / الاختبارات / التمديد / القاعدة / تقليل
  • [x] حيوانات الباندا / الاختبارات / المصفوفات / test_datetimelike.py
  • [] الباندا / الاختبارات / التمديد / test_boolean.py
  • [] الباندا / الاختبارات / التمديد / القاعدة / getitem.py
  • [] الباندا / الاختبارات / المصفوفات / منطقية / test_arithmetic.py
  • [] الباندا / الاختبارات / التمديد / قاعدة / setitem.py
  • [] الباندا / الاختبارات / الفهارس / الفاصل / test_astype.py
  • [] الباندا / الاختبارات / io / المحلل اللغوي / test_network.py
  • [] الباندا / الاختبارات / التمديد / test_integer.py
  • [] حيوانات الباندا / الاختبارات / الفهرسة / multindex / test_partial.py
  • [] الباندا / الاختبارات / io / المحلل اللغوي / test_python_parser_only.py
  • [] الباندا / الاختبارات / io / test_html.py
  • [] الباندا / الاختبارات / التخفيضات / test_stat_reductions.py
  • [] الباندا / الاختبارات / dtypes / test_inference.py
  • [] الباندا / الاختبارات / التآمر / test_hist_method.py
  • [] الباندا / الاختبارات / سلسلة / application / test_series_apply.py
  • [] الباندا / الاختبارات / io / excel / test_xlrd.py
  • [] الباندا / الاختبارات / الفهارس / test_common.py
  • [] الباندا / الاختبارات / الاستخدامات / test_assert_series_equal.py
  • [] الباندا / الاختبارات / التمديد / القاعدة / العمليات
  • [] الباندا / الاختبارات / io / test_clipboard.py
  • [] الباندا / الاختبارات / التآمر / الإطار / test_frame_color.py
  • [] الباندا / الاختبارات / النافذة / لحظات / test_moments_ewm.py
  • [] الباندا / الاختبارات / io / test_gbq.py
  • [] الباندا / الاختبارات / التخفيضات / test_reductions.py
  • [] الباندا / الاختبارات / io / test_feather.py
  • [] الباندا / الاختبارات / إعادة العينة / test_resampler_grouper.py
  • [] الباندا / الاختبارات / الفهارس / multi / test_indexing.py
  • [] الباندا / الاختبارات / io / test_common.py
  • [] الباندا / الاختبارات / io / test_sql.py
  • [] الباندا / الاختبارات / التآمر / test_series.py
  • [] الباندا / الاختبارات / io / test_fsspec.py
  • [] الباندا / الاختبارات / التمديد / test_floating.py
  • [] الباندا / الاختبارات / الفهارس / multi / test_setops.py
  • [] الباندا / الاختبارات / reshape / test_get_dummies.py
  • [] الباندا / الاختبارات / التآمر / الإطار / test_frame_subplots.py
  • [] الباندا / الاختبارات / التآمر / test_backend.py
  • [] الباندا / الاختبارات / العامة / الأساليب / test_sample.py
  • [] الباندا / الاختبارات / التآمر / test_boxplot_method.py
  • [] الباندا / الاختبارات / io / test_parquet.py
  • [] الباندا / الاختبارات / التمديد / test_string.py
  • [] الباندا / الاختبارات / io / pytables / test_complex.py
  • [] الباندا / الاختبارات / الفهارس / test_numpy_compat.py
  • [] الباندا / الاختبارات / io / test_gcs.py
  • [] الباندا / الاختبارات / io / sas / test_sas7bdat.py
  • [] الباندا / الاختبارات / النافذة / test_apply.py
  • [] الباندا / الاختبارات / سلسلة / test_ufunc.py
  • [] الباندا / الاختبارات / التآمر / الإطار / test_frame.py
  • [] الباندا / الاختبارات / إعادة تشكيل / test_union_categoricals.py
  • [] الباندا / الاختبارات / io / json / test_ujson.py
  • [] الباندا / الاختبارات / الفهرسة / test_coercion.py
  • [] الباندا / الاختبارات / io / pytables / test_store.py
  • [] الباندا / الاختبارات / الحساب / test_compat.py
  • [] الباندا / الاختبارات / io / json / test_pandas.py
  • [] الباندا / الاختبارات / io / json / test_json_table_schema.py

    - [] الباندا / الاختبارات / العددية / test_nat.py

ملاحظة:

قد تتغير القائمة حيث يتم نقل الملفات / إعادة تسميتها باستمرار.


أخذ كل شيء تقريبًا من # 23922 ، الذي افتتحه في الأصل gfyoung.

Style Testing good first issue

ال 51 كومينتر

سآخذ:

  • [x] حيوانات الباندا / الاختبارات / test_common.py
  • [x] الباندا / الاختبارات / test_downstream.py
  • [x] حيوانات الباندا / الاختبارات / test_errors.py
  • [x] حيوانات الباندا / الاختبارات / test_lib.py
  • [x] حيوانات الباندا / الاختبارات / test_take.py
  • [x] حيوانات الباندا / الاختبارات / الداخلية / test_internals.py
  • [x] حيوانات الباندا / الاختبارات / النافذة / test_rolling.py

سأبدأ العمل على:

الباندا / الاختبارات / الحساب / test_numeric.py
الباندا / الاختبارات / الحساب / test_object.py
الباندا / الاختبارات / الحساب / test_period.py
الباندا / الاختبارات / الحساب / test_timedelta64.py
الباندا / الاختبارات / المصفوفات / الفاصل الزمني / 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 ) ، سأضع التعليمات في نص المشكلة ، مرة واحدة يتم دمجه: ابتسم:

MomIsBestFriend سأساعد في :
الباندا / الاختبارات / القاعدة / test_constructors.py
الباندا / الاختبارات / القاعدة / test_ops.py

يمكنني الاهتمام بهذه:
تضمين التغريدة

الباندا / الاختبارات / io / test_html.py
الباندا / الاختبارات / io / test_parquet.py
الباندا / الاختبارات / io / test_sql.py
الباندا / الاختبارات / io / test_stata.py
الباندا / الاختبارات / التآمر / test_backend.py
الباندا / الاختبارات / التآمر / test_boxplot_method.py
الباندا / الاختبارات / التآمر / test_frame.py
الباندا / الاختبارات / التآمر / test_hist_method.py
الباندا / الاختبارات / التآمر / test_series.py
الباندا / الاختبارات / التخفيضات / test_reductions.py

MomIsBestFriend كان هناك بعض النقاش في https://github.com/pandas-dev/pandas/issues/23922 حول هذا الموضوع. لأنني أكرر كما قلت هناك: لا أعتقد أنه ينبغي لنا "بشكل أعمى" التأكيد على جميع رسائل الخطأ.

بعض الأشياء التي قيلت في هذا الموضوع: قصرها على رسائل الخطأ الداخلية ، وقصر المطابقة على بضع كلمات رئيسية للرسالة ، وتجنب الأنماط المعقدة.

أيضًا ، أعتقد أن تأكيد رسائل الخطأ يجب أن يسير جنبًا إلى جنب مع التحقق الفعلي مما إذا كانت رسالة خطأ جيدة وواضحة ، وربما تحسين ذلك.

قد يكون من الجيد استخلاص قائمة من نقاط الاهتمام من المناقشة في القضية الأخرى لوضعها هنا.

تضمين التغريدة

MomIsBestFriend كان هناك بعض النقاش في # 23922 حول هذا الموضوع. لأنني أكرر كما قلت هناك: لا أعتقد أنه ينبغي لنا "بشكل أعمى" التأكيد على جميع رسائل الخطأ.

أوافق تمامًا ، لكن المشكلة تكمن في أن الوافدين الجدد لا يعرفون رسائل الخطأ التي يجب تأكيدها وما هي رسائل الخطأ التي يجب عدم التأكيد عليها ، إذا حددنا بطريقة ما القواعد المتعلقة برسائل الخطأ التي يجب تأكيدها وما لا يجب التأكيد عليه ، وفي نفس الوقت الاحتفاظ هذه المسألة "ودية للمبتدئين" ، سيكون رائعا (IMO).

أيضًا ، إذا كنا نخطط لفرض ذلك في CI ، فنحن بحاجة إلى تحديد ما هو bare pytest raises ما "عارية" عن قصد (تعليق IMO بنمط isort: skip كافٍ) ، وأيضًا غير ذلك سيعرف الناس أن 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/ 23922 # issuecomment -458735169 لأن فائدة IMO أكبر من التكلفة.

أيضًا ، أعتقد أن تأكيد رسائل الخطأ يجب أن يسير جنبًا إلى جنب مع التحقق الفعلي مما إذا كانت رسالة خطأ جيدة وواضحة ، وربما تحسين ذلك.

أوافق تماما.

قد يكون من الجيد استخلاص قائمة من نقاط الاهتمام من المناقشة في القضية الأخرى لوضعها هنا.

لقد قرأت المحادثة في # 23922 ، لكنني لم أر أي شيء يستحق IMO وضعه كـ "ملاحظة" في نص القضية ، هل يمكنك من فضلك توضيح الأشياء التي فاتني؟

لقد قرأت المحادثة في # 23922 ، لكنني لم أر أي شيء يستحق IMO وضعه كـ "ملاحظة" في نص القضية ، هل يمكنك من فضلك توضيح الأشياء التي فاتني؟

لا أرى الكثير لأضيفه من هذه المشكلة أيضًا.

أوافق تمامًا ، لكن المشكلة تكمن في أن الوافدين الجدد لا يعرفون رسائل الخطأ التي يجب تأكيدها وما هي رسائل الخطأ التي يجب عدم التأكيد عليها ، إذا حددنا بطريقة ما القواعد المتعلقة برسائل الخطأ التي يجب تأكيدها وما لا يجب التأكيد عليه ، وفي نفس الوقت الاحتفاظ هذه المسألة "ودية للمبتدئين" ، سيكون رائعا (IMO).

أيضًا ، إذا كنا نخطط لفرض هذا في CI ، فنحن بحاجة إلى تحديد ما هي الزيادات العارية عن قصد (تعليق IMO مع أسلوب isort: التخطي كافٍ) ، وكذلك حتى يعرف الأشخاص الآخرون أن رفع pytest العارية عارية عن قصد.

هذه أسباب جزئيًا لماذا لا يكون اختيار واختيار أي اختبار اختبار وأي منها لا اختبار هو الاتجاه الذي أفضل. أود أن أضيف أيضًا أننا نقوم أحيانًا بفحص سلاسل رسائل الخطأ في كتل except ، لذا فإن رسائل الخطأ الجيدة تفيدنا أيضًا أثناء التطوير.

أيضًا ، إذا كانت هذه الرسائل "الداخلية" ليست بهذه الأهمية ، فلماذا تظهر رسالة خطأ في المقام الأول؟ سأقوم بعد ذلك بإنشاء مساعد يقوم بعد ذلك بتأكيد أن الرسالة فارغة.

لا أفهم سبب عدم رغبتنا في اختبار رسائل الخطأ الداخلية ، هل يمكنك تقديم المزيد من التفاصيل من فضلك؟

لذلك قلت "الحد من رسائل الخطأ الداخلية" ، بينما "الداخلية" يمكن أن تكون غامضة بعض الشيء ... أعني: رسائل الخطأ التي تنشأ من الباندا نفسها ، وبالطبع نريد اختبارها. لكنني قصدت أننا (IMO) يجب ألا نختبر الكثير من رسائل الخطأ الخارجية ، وهذا يعني: الرسائل القادمة من مكتبات غير مرتبة أو مكتبات أخرى على سبيل المثال. يمكن لـ Numpy تغيير ذلك ، ثم تبدأ اختباراتنا بالفشل بسبب تغيير تجميلي في numpy (وهذا ليس افتراضيًا ، لقد حدث الأسبوع الماضي فقط على ما أعتقد).

الآن ، استخدمت كلمة "داخلي" في سياق مختلف في https://github.com/pandas-dev/pandas/pull/30998#discussion_r366726966. هناك ، قصدته كرسالة خطأ داخلية موجهة للمطور ولا ينبغي

أرى النقطة التي أشرت إليها في # 23922 (تعليق) ، وأنا 1+ على ذلك ، لكنني +2 (إذا كان ذلك منطقيًا) في # 23922 (تعليق) و # 23922 (تعليق) لأن IMO فائدة أكبر من التكلفة.

دعنا نضع تعليق simonjayhawkins الذي قمت بالربط به هنا:

أنا أعمل على افتراض ، ربما بشكل غير صحيح ، أنه سيكون مفيدًا

  1. تحديد الاختبارات التي يمكن تحديد معلمات
  2. تحديد الاختبارات التي يجب تقسيمها
  3. فهم أفضل لوضع الفشل الذي تم اختباره
  4. إضافة المزيد من الوثائق إلى الاختبارات بشكل غير مباشر
  5. تحديد أين يمكن أن تكون رسائل الخطأ أكثر اتساقًا
  6. تحديد الاختبارات الزائدة عن الحاجة
  7. تساعد في تحسين رسائل الخطأ
  8. تحديد الاختبارات التي تم اجتيازها حاليًا لسبب خاطئ.

هذه كلها أشياء مفيدة ، وأنا أتفق تماما. لكن هذا ليس بالأمر السهل ، وإذا أردنا إخراج هذه الأشياء من هذه المشكلة ، فهذه المشكلة ليست للمبتدئين. بالطبع ، لا يحتاج المبتدئون إلى القيام بكل هذه الأشياء في وقت واحد ، ولكن لا يزال لدي شعور بأن تلك التأكيدات التي تضيف العلاقات العامة غالبًا ما تكون قريبة إلى حد ما من "إضافة رسالة الخطأ الحالية بشكل أعمى إلى المكالمة pytest.raises" دون المرور بأي شيء كذلك (النقاط المذكورة أعلاه).

أيضًا ، إذا كانت النقاط المذكورة أعلاه هي ما يجعل هذا التمرين مفيدًا ، فأنا أعتقد أن هناك تعليمات أكثر تحديدًا حول هذا الأمر ومن المفيد وضعها في مقدمة هذه المسألة.


أن تكون واضحة، أنا كل لرسائل الخطأ أفضل والاختبارات أفضل مؤكدا لدينا والحفاظ على تلك الرسائل الخطأ جيدة. لكن لدينا أيضًا وقتًا محدودًا ، وكل علاقات عامة تتطلب وقتًا وجهدًا للقيام بها ومراجعتها ، والسؤال هو أين يتم بذل الجهد بشكل أفضل.
IMO ، سيكون من المفيد أكثر بدلاً من ذلك التركيز على "إصلاح الأخطاء التي تثير القلق" بدلاً من التركيز على "تحسين رسائل الخطأ" (وأثناء القيام بذلك ، اختبرها بشكل أفضل).

أيضًا ، إذا كانت النقاط المذكورة أعلاه هي ما يجعل هذا التمرين مفيدًا ، فأنا أعتقد أن هناك تعليمات أكثر تحديدًا حول هذا الأمر ومن المفيد وضعها في مقدمة هذه المسألة.

قد يكون من المنطقي إنشاء مشكلة أكبر لتتبع هذه (المشكلات الأخرى التي تستحق تضمينها في مثل هذه المشكلة هي https://github.com/pandas-dev/pandas/issues/19159 و https://github.com/pandas- ديف / الباندا / القضايا / 21575).

هذا الجزء في حد ذاته قائم بذاته ويسهل الوصول إليه للمبتدئين.

gfyoung كيف ترتبط تلك القضايا التي تربطها بهذه المناقشة؟

إنها تتعلق بالتعليق الذي قدمته صراحةً من simonjayhawkins

يحتوي 31072 على تطابق واحد مفقود في stata.py

كقولك هنا https://github.com/pandas-dev/pandas/pull/31091#issuecomment -575422207 أنا مع فكرة jorisvandenbossche ، أننا لن نختبر رسائل الخطأ من الحزم الخارجية ، أي أفكار حول كيفية لتمييز هؤلاء؟

إذا كنا لا نرغب حقًا في اختبار رسائل خطأ معينة (يمكنني الذهاب في أي من الاتجاهين على الرسائل الخارجية لأكون عادلاً) ، أعتقد أنه يجب علينا فقط إنشاء وظيفة مساعدة مثل هذا:

~ بيثونdef external_error_raised (الاستثناء_ المتوقع):إرجاع pytest.raises (الاستثناء المتوقع ، المطابقة = لا شيء)~

سيوضح هذا لأنفسنا في المستقبل أن هذا خطأ غير متعلق بالحيوانات الباندا ، وأن match=None يعمل على تهدئة أي فحص فحص نقوم بتطويره مقابل الزيادات العارية pytest .

إذا كنا لا نرغب حقًا في اختبار رسائل خطأ معينة (يمكنني الذهاب في أي من الاتجاهين على الرسائل الخارجية لأكون عادلاً) ، أعتقد أنه يجب علينا فقط إنشاء وظيفة مساعدة مثل هذا:

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

سيوضح هذا لأنفسنا في المستقبل أن هذا خطأ ليس من نوع حيوانات الباندا ، وأن match=None يعمل على تهدئة أي فحص فحص نقوم بتطويره مقابل زيادات pytest .

+1 على ذلك.

تعجبني هذه الفكرة حقًا ، هل يمكننا جعلها اتفاقية لاختباراتنا؟

إذا كانت إحدى الوظائف تختبر ما إذا كانت دالة / طريقة تؤدي إلى حدوث خطأ ، وكان الخطأ خطأ خارجيًا ، فإننا ببساطة نضع match=None في "pytest.raises "`.

هل يمكننا جعلها اتفاقية لاختباراتنا؟

أعني بذلك وضع قسم في دليل المساهمة .

إذا كانت إحدى الوظائف تختبر ما إذا كانت دالة / طريقة تثير خطأ ، والخطأ خطأ خارجي ، فإننا ببساطة نضع match = None في "pytest.raises "`.

أفضل وظيفة المساعد لأنك لن تضطر إلى التفكير في إضافة ذلك. أيضًا ، يكون اسم المساعد أكثر وضوحًا حول سبب قيامنا بذلك.

إذا كنا لا نرغب حقًا في اختبار رسائل خطأ معينة (يمكنني الذهاب في أي من الاتجاهين على الرسائل الخارجية لأكون عادلاً) ، أعتقد أنه يجب علينا فقط إنشاء وظيفة مساعدة مثل هذا:

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

سيوضح هذا لأنفسنا في المستقبل أن هذا خطأ ليس من نوع حيوانات الباندا ، وأن match=None يعمل على تهدئة أي فحص فحص نقوم بتطويره مقابل زيادات pytest .

gfyoung أين تنصح بوضع هذه الوظيفة المساعدة؟ (كما لو في أي ملف؟)

pandas._testing

أهلا،

أود العمل على:

الباندا / الاختبارات / المصفوفات / الفاصل / test_ops.py
الباندا / الاختبارات / المصفوفات / test_array.py
الباندا / الاختبارات / المصفوفات / test_boolean.py

مرحبًا - أرغب في العمل على:

الباندا / الاختبارات / الحساب / test_period.py
الباندا / الاختبارات / الحساب / test_timedelta64.py

مرحبًا بالجميع ، سأتناول ما يلي:

الباندا / الاختبارات / الحساب / test_compat.py
الباندا / الاختبارات / الحساب / test_eval.py
الباندا / الاختبارات / dtypes / cast / test_upcast.py
الباندا / الاختبارات / dtypes / test_dtypes.py

MomIsBestFriend تم تنفيذ هذا بالفعل ولكن لم يتم وضع علامة "تم" عليه:
الباندا / الاختبارات / الحساب / test_numeric.py

تحديث

MomIsBestFriend هذه أيضا:
الباندا / الاختبارات / الحساب / test_period.py
الباندا / الاختبارات / المصفوفات / test_integer.py
الباندا / الاختبارات / المصفوفات / test_period.py

تم تضمين هذه في # 31852

الباندا / الاختبارات / التمديد / العشري / test_decimal.py
الباندا / الاختبارات / التمديد / json / test_json.py
الباندا / الاختبارات / التمديد / test_boolean.py
الباندا / الاختبارات / التمديد / test_categorical.py
الباندا / الاختبارات / الإطار / الفهرسة / test_categorical.py
الباندا / الاختبارات / الإطار / الفهرسة / test_indexing.py
الباندا / الاختبارات / الإطار / الفهرسة / test_where.py
الباندا / الاختبارات / الإطار / الأساليب / test_explode.py
الباندا / الاختبارات / الإطار / الأساليب / test_isin.py
الباندا / الاختبارات / الإطار / الأساليب / test_quantile.py
الباندا / الاختبارات / الإطار / الأساليب / test_round.py
الباندا / الاختبارات / الإطار / الأساليب / test_sort_values.py
الباندا / الاختبارات / الإطار / الأساليب / test_to_dict.py

سآخذ

الباندا / الاختبارات / io / excel / test_readers.py
الباندا / الاختبارات / io / excel / test_writers.py
الباندا / الاختبارات / io / excel / test_xlwt.py
الباندا / الاختبارات / io / التنسيقات / test_format.py
الباندا / الاختبارات / io / التنسيقات / test_style.py
الباندا / الاختبارات / io / التنسيقات / test_to_latex.py

تضمين التغريدة
هذه واحدة بدون علامة:

  • الباندا / الاختبارات / الفهارس / datetimes / test_astype.py

الباندا / الاختبارات / الفهارس / datetimes / test_tools.py غير موجود

سوف افعل:

  • الباندا / الاختبارات / الفهارس / التاريخ / test_constructors.py
  • الباندا / الاختبارات / الفهارس / datetimes / test_date_range.py
  • الباندا / الاختبارات / الفهارس / datetimes / test_indexing.py
  • الباندا / الاختبارات / الفهارس / التاريخ / test_shift.py
  • الباندا / الاختبارات / الفهارس / التاريخ / test_timezones.py

لقد قمت بتحديث المنشور الأصلي ، والآن بعد أن أصبح هناك نص برمجي لاكتشاف pytest raises قمت بتضمين إرشادات حول كيفية استخدامه ، إذا كان لا يزال لدى أي شخص أسئلة ، فأنت مرحب بك لطرحها :)

سآخذ،

الباندا / الاختبارات / الحساب / test_timedelta64.py

الباندا / الاختبارات / العددية / الطابع الزمني / test_arithmetic.py
الباندا / الاختبارات / العددية / الطابع الزمني / test_comparisons.py
الباندا / الاختبارات / العددية / الطابع الزمني / test_constructors.py
الباندا / الاختبارات / العددية / الطابع الزمني / test_timezones.py
الباندا / الاختبارات / الحجمي / الطابع الزمني / test_unary_ops.py

يبدو أن جميع الاختبارات في الباندا / الاختبارات / العددية / الطابع الزمني / قد تم إصلاحها بالفعل.

$ git checkout master
Already on 'master'
$ python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises"  pandas/tests/scalar/timestamp/
$ 

الباندا / الاختبارات / المصفوفات / test_boolean.py => مفقود.

انى آخذ
الباندا / الاختبارات / المصفوفات / الفاصل / test_ops.py
الباندا / الاختبارات / المصفوفات / test_datetimelike.py

الباندا / الاختبارات / groupby / test_categorical.py
الباندا / الاختبارات / groupby / test_groupby.py
الباندا / الاختبارات / groupby / test_timegrouper.py

الباندا / الاختبارات / arithmetic / test_timedelta64.py => # 33010

الباندا / الاختبارات / scalar / timestamp / test_arithmetic.py => لا توجد مشكلة
pandas / الاختبارات / scalar / timestamp / test_comparisons.py => لا توجد مشكلة
pandas / الاختبارات / scalar / timestamp / test_constructors.py => لا توجد مشكلة
pandas / الاختبارات / scalar / timestamp / test_timezones.py => لا توجد مشكلة
الباندا / الاختبارات / scalar / timestamp / test_unary_ops.py => لا توجد مشكلة

الباندا / الاختبارات / المصفوفات / test_boolean.py => مفقود.

الباندا / الاختبارات / المصفوفات / الفاصل / test_ops.py => # 33010
الباندا / الاختبارات / المصفوفات / test_datetimelike.py => # 33010

الباندا / الاختبارات / groupby / test_categorical.py => # 33144
الباندا / الاختبارات / groupby / test_groupby.py => لا توجد مشكلة
pandas / الاختبارات / groupby / test_timegrouper.py => لا توجد مشكلة

الباندا / الاختبارات / الفهارس / categorical / test_category.py => لا توجد مشكلة
الباندا / الاختبارات / الفهارس / common.py # 33144
الباندا / الاختبارات / الفهارس / datetimelike.py # 33144

pandas / الاختبارات / الفهارس / الفاصل / test_astype.py => تم وضع علامة على جميع الاختبارات المتأثرة بالفشل ، هل ما زلنا بحاجة إلى الإصلاح ، فكيف إذن؟

الباندا / الاختبارات / الفهارس / multi / test_compat.py # 33144
pandas / الاختبارات / الفهارس / multi / test_duplicates.py => لا توجد مشكلة
pandas / tests / indexes / multi / test_format.py => الملف غير موجود.
الباندا / الاختبارات / الفهارس / multi / test_reshape.py # 33144
pandas / الاختبارات / الفهارس / multi / test_setops.py => لا توجد مشكلة
الباندا / الاختبارات / الفهارس / 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

أنا أعمل مع

الباندا / الاختبارات / الفهارس / النطاقات / test_constructors.py
الباندا / الاختبارات / الفهارس / النطاقات / test_range.py
الباندا / الاختبارات / الفهرسة / multiindex / test_chaining_and_caching.py
الباندا / الاختبارات / الفهرسة / multiindex / test_partial.py
الباندا / الاختبارات / السلسلة / الفهرسة / test_alter_index.py
الباندا / الاختبارات / المصفوفات / منطقية / test_function.py

يعمل على:

pandas/tests/reshape/merge/test_multi.py

سآخذ:
الباندا / الاختبارات / النافذة / لحظات / test_moments_ewm.py
الباندا / الاختبارات / النافذة / لحظات / test_moments_rolling.py
الباندا / الاختبارات / النافذة / test_dtypes.py
الباندا / الاختبارات / النافذة / test_ewm.py
الباندا / الاختبارات / النافذة / test_expanding.py
الباندا / الاختبارات / النافذة / test_timeseries_window.py

سأأخذ أيضًا:

  • الباندا / الاختبارات / الإطار / الأساليب / test_assign.py
  • الباندا / الاختبارات / الإطار / الأساليب / test_at_time.py
  • الباندا / الاختبارات / الإطار / الأساليب / test_between_time.py
  • الباندا / الاختبارات / الإطار / الأساليب / test_first_and_last.py
  • الباندا / الاختبارات / الإطار / الأساليب / test_interpolate.py
  • الباندا / الاختبارات / الإطار / الأساليب / test_replace.py
  • الباندا / الاختبارات / الإطار / test_query_eval.py

أهلا،
أنا مطور جديد للمشروع وأود المساعدة في ذلك. أي من الاختبارات المتبقية هو الأفضل للمبتدئين؟

شكرا،
كيفن

أهلا،
أنا مطور جديد للمشروع وأود المساعدة في ذلك. أي من الاختبارات المتبقية هو الأفضل للمبتدئين؟

شكرا،
كيفن

مرحبًا - لا أعتقد أن أيًا من هذه الأشياء أسهل أو أصعب من أي شيء آخر ، سيكون أي منها مكانًا جيدًا للبدء

أتلقى خطأ أثناء تشغيل البرنامج النصي validate_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>

يحدث ذلك عند قراءة "pandas / tests / test_strings.py" يتم ترميز جميع الملفات كـ cp1252.

كنت أرغب في تشغيل البرنامج النصي للتحقق مرة أخرى من الاختبارات التي لم تنته بعد لتجنب تكرار العمل.

لا تحتوي معظم NotImplementedError s على رسالة محددة ليتم مطابقتها ، وأنا أعلم أنها تتعارض مع الغرض ، ولكن هل من الجيد تغييرها إلى pytest.raises(NotImplementedError, match=None) فقط لإسكات الوبر ؟

سآخذ:

  • الباندا / الاختبارات / الأدوات / test_to_datetime.py
  • الباندا / الاختبارات / tseries / offsets / test_offsets.py

للبدأ.

كيفن

أنا جديد على هذا ، لذا سأبدأ بهذا:

  • الباندا / الاختبارات / tseries / offsets / test_ticks.py

مرحبًا ، أنا جديد في المساهمة. شكرا على الكتابة الواضحة في هذا العدد. سأبدأ بأخذ pandas/tests/generic/test_duplicate_labels.py ، وسأعالج المزيد إذا نجح الأمر.

سآخذ الباندا / الاختبارات / المصفوفات / 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/

إلى .pre-commit-config.yaml في قسم - repo: local ، ثم قم بالتشغيل

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

لقد قمت بتحديث المشكلة مع الملفات المعلقة المتبقية

يمكنني أخذ هذه:

  • [x] الباندا / الاختبارات / io / pytables / test_timezones.py
  • [] الباندا / الاختبارات / العامة / الأساليب / test_pipe.py
  • [] الباندا / الاختبارات / إعادة تشكيل / دمج / test_merge_asof.py
  • [] الباندا / الاختبارات / التمديد / القاعدة / تقليل
  • [] الباندا / الاختبارات / التمديد / القاعدة / getitem.py
  • الباندا / الاختبارات / المصفوفات / test_datetimelike.py

هؤلاء هم الخمسة الأوائل في القائمة اعتبارًا من اليوم.

marktgraham إذا لم تكن قد فعلت test_datetime.py حتى الآن. يرجى ترك الأمر بمفرده لأنني على وشك إجراء علاقات عامة

@ liaoaoyuan97 لا تقلق ، لم أتطرق إلى test_datetimelike.py حتى الآن.

سآخذ الباندا / الاختبارات / التمديد / القاعدة / 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/

إلى .pre-commit-config.yaml في قسم - repo: local ، ثم قم بالتشغيل

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

هل يعقل إضافة هذا إلى .pre-commit-config.yaml ثم تحديث التعليمات الموجودة في هذا الموضوع؟

هل يعقل إضافة هذا إلى .pre-الالتزام-config.yaml ثم تحديث التعليمات الموجودة في هذا الموضوع؟

سنضيفه إلى .pre-commit-config.yaml بمجرد إصلاح جميع الأخطاء التي يتسبب فيها ، نعم

يبدو أنه مرتبط بـ # 37419 ربما؟

لا ، إنها مرتبطة بـ # 37379 (أي عندما نقلنا هذا النص إلى الالتزام المسبق ، وبالتالي لم يعد من الضروري تشغيله على الدلائل)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات