Pandas: [Gute erste Ausgabe] TST: Bare pytest.raises nicht zulassen

Erstellt am 14. Jan. 2020  ·  51Kommentare  ·  Quelle: pandas-dev/pandas

Endbenutzer verlassen sich für ihre Debugging-Zwecke auf Fehlermeldungen. Daher ist es wichtig, dass wir sicherstellen, dass je nach ausgelöstem Fehler die richtigen Fehlermeldungen angezeigt werden.

Die Kernidee besteht darin, dies umzusetzen:

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

Dazu:

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

Sie können mehr über lesen pytest.raises hier .


Randnotiz:

Falls es sich bei der ausgegebenen Fehlermeldung um eine externe Fehlermeldung handelt (das heißt, sie ist nicht pandasspezifisch), sollten Sie external_error_raised anstelle von pytest.raises .

die Verwendung von external_error_raised ist __exakt__ wie pytest.raises der einzige Unterschied besteht darin, dass Sie das Argument match .

Zum Beispiel:

import pandas._testing as tm

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

Keynotes:

  • Vergessen Sie nicht, dieses Problem in Ihrer PR zu verlinken, fügen Sie dies ein
https://github.com/pandas-dev/pandas/issues/30999

in Ihrer PR.

  • Bitte kommentieren Sie, woran Sie arbeiten möchten, damit wir nicht doppelt arbeiten (Sie brauchen mich nicht zu erwähnen, Sie können einfach angeben, woran Sie arbeiten möchten, denken Sie einfach daran, zu überprüfen, ob etwas bereits vergeben ist).

  • Wenn eine Datei/Dateien, die als "erledigt" markiert werden sollten (als ob keine Arbeit mehr zu erledigen ist), nicht als "erledigt" markiert sind, teilen Sie mir dies bitte mit (Und erwähnen Sie mich, indem Sie @MomIsBestFriend eingeben


Um die vollständige Liste selbst zu generieren, können Sie Folgendes ausführen:

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

Sie können es auch für eine einzelne Datei ausführen, z. B.:

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

Wenn eine Datei ein bloßes pytest.raises , gibt das Skript Folgendes aus:

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

Das bedeutet, dass bei pandas/tests/arithmetic/test_numeric.py in Zeile 553 ein bloßes pytest.raises


Die aktuelle Liste lautet:

  • [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

HINWEIS:

Die Liste kann sich ändern, wenn Dateien ständig verschoben/umbenannt werden.


Nahm so ziemlich alles von #23922, das ursprünglich von @gfyoung geöffnet wurde.

Style Testing good first issue

Alle 51 Kommentare

Ich werde nehmen:

  • [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

Ich fange an zu arbeiten an:

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 Ich hoffe, das hilft dir :)

(Die Zahlen stehen für die Zeilennummer)

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 die Liste wurde nicht von grep -r -e "pytest.raises([a-zA-Z]*)" pandas/tests -l generiert, sondern vom Skript in #30755 (ein Validierungstyp namens bare_pytest_raises ). es wird zusammengeführt :smile:

@MomIsBestFriend Ich helfe bei:
pandas/tests/base/test_constructors.py
pandas/tests/base/test_ops.py

Ich kann mich um diese kümmern:
@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, es gab einige Diskussionen in https://github.com/pandas-dev/pandas/issues/23922 , um dies zu tun . Denn um es noch einmal zu wiederholen: Ich finde, wir sollten nicht alle Fehlermeldungen "blind" geltend machen.

Einige Dinge, die in diesem Thread gesagt wurden: Beschränken Sie es auf interne Fehlermeldungen, beschränken Sie die Übereinstimmung auf einige Schlüsselwörter der Nachricht, vermeiden Sie komplizierte Muster.

Außerdem denke ich, dass das Zuweisen von Fehlermeldungen Hand in Hand gehen sollte mit der tatsächlichen Überprüfung, ob es sich um eine gute, klare Fehlermeldung handelt, und diese möglicherweise zu verbessern.

Es könnte gut sein, eine Liste von Aufmerksamkeitspunkten aus der Diskussion in der anderen Ausgabe herauszufiltern, um sie hier zu veröffentlichen.

@jorisvandenbossche

@MomIsBestFriend in #

Ich stimme voll und ganz zu, aber das Problem ist, dass Neulinge nicht wissen, welche Fehlermeldungen sie bestätigen sollen und welche nicht, wenn wir irgendwie Regeln definieren, welche Fehlermeldungen sie bestätigen und was nicht, und gleichzeitig beibehalten diese Ausgabe "einsteigerfreundlich", es wird toll (IMO).

Wenn wir dies auch in der CI durchsetzen möchten, müssen wir irgendwie markieren, was bare pytest raises absichtlich "nackt" sind (IMO-Kommentar im Stil von isort: skip reicht aus), und auch andere Die Leute werden wissen, dass ein bestimmtes bare pytest raise absichtlich leer ist.

Einige Dinge, die in diesem Thread gesagt wurden: Beschränken Sie es auf interne Fehlermeldungen, beschränken Sie die Übereinstimmung auf einige Schlüsselwörter der Nachricht, vermeiden Sie komplizierte Muster.

Ich verstehe nicht, warum wir interne Fehlermeldungen nicht testen wollen, können Sie das bitte noch genauer ausführen?

Ich sehe den Punkt, auf den Sie in https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458551763 hingewiesen haben, und ich bin +1 , aber ich bin +2 (falls das Sinn macht) auf https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458733117 und https://github.com/pandas-dev/pandas/issues/ 23922#issuecomment -458735169 weil IMO der Nutzen größer ist als die Kosten.

Außerdem denke ich, dass das Zuweisen von Fehlermeldungen Hand in Hand gehen sollte mit der tatsächlichen Überprüfung, ob es sich um eine gute, klare Fehlermeldung handelt, und diese möglicherweise zu verbessern.

Absolute Zustimmung.

Es könnte gut sein, eine Liste von Aufmerksamkeitspunkten aus der Diskussion in der anderen Ausgabe herauszufiltern, um sie hier zu veröffentlichen.

Ich habe das Gespräch unter Nr. 23922 gelesen, aber ich habe nichts gesehen, was es IMO wert wäre, als "Notiz" in den Text der Ausgabe aufgenommen zu werden. Können Sie bitte auf Dinge hinweisen, die ich übersehen habe?

Ich habe das Gespräch unter Nr. 23922 gelesen, aber ich habe nichts gesehen, was es IMO wert wäre, als "Notiz" in den Text der Ausgabe aufgenommen zu werden. Können Sie bitte auf Dinge hinweisen, die ich übersehen habe?

Ich sehe dem Problem auch nicht viel hinzuzufügen.

Ich stimme voll und ganz zu, aber das Problem ist, dass Neulinge nicht wissen, welche Fehlermeldungen sie bestätigen sollen und welche nicht, wenn wir irgendwie Regeln definieren, welche Fehlermeldungen sie bestätigen und was nicht, und gleichzeitig beibehalten diese Ausgabe "einsteigerfreundlich", es wird toll (IMO).

Wenn wir dies in der CI erzwingen möchten, müssen wir auch irgendwie markieren, welche bloßen pytest-Raises absichtlich "nackt" sind (IMO-Kommentar mit dem Stil von isort: überspringen ist genug), und auch damit andere Leute wissen, dass eine bestimmte bare pytest Raise ist absichtlich leer.

Dies sind zum Teil Gründe, warum es nicht die Richtung ist, die ich bevorzugen würde. Ich möchte auch hinzufügen, dass wir manchmal Fehlermeldungen in except Blöcken überprüfen, sodass uns gute Fehlermeldungen auch während der Entwicklung zugute kommen.

Und wenn diese "internen" Meldungen nicht so wichtig sind, warum erhalten wir dann überhaupt eine Fehlermeldung? Ich würde dann einfach einen Helfer erstellen, der dann bestätigt, dass die Nachricht leer ist.

Ich verstehe nicht, warum wir interne Fehlermeldungen nicht testen wollen, können Sie das bitte noch genauer ausführen?

Also sagte ich "Auf interne Fehlermeldungen beschränken", während "intern" etwas mehrdeutig sein kann... Ich meinte: Fehlermeldungen, die von Pandas selbst stammen, und die wollen wir natürlich testen. Aber damit meinte ich, dass wir (IMO) nicht zu viele externe Fehlermeldungen testen sollten, dh: Meldungen von zB numpy oder anderen Bibliotheken. Numpy kann diese ändern, und dann schlagen unsere Tests aufgrund einer kosmetischen Änderung von Numpy fehl (und das ist nicht hypothetisch, es geschah erst letzte Woche, glaube ich).

Jetzt habe ich "internal" in einem anderen Kontext in https://github.com/pandas-dev/pandas/pull/30998#discussion_r366726966 verwendet. Damit meinte ich eine interne, entwicklerorientierte Fehlermeldung, die niemals an den Benutzer ausgegeben werden sollte. IMO, die sind nicht wichtig, genau mit der Fehlermeldung zu testen.

Ich sehe den Punkt, auf den Sie in #23922 (Kommentar) hingewiesen haben, und ich bin +1 dafür, aber ich bin +2 (wenn das Sinn macht) auf #23922 (Kommentar) und #23922 (Kommentar), weil IMO ist der Nutzen größer als die Kosten.

Lassen Sie uns den Kommentar von @simonjayhawkins , auf den Sie hier verlinken,

Ich gehe davon aus, vielleicht fälschlicherweise, dass es von Vorteil sein wird,

  1. Tests identifizieren, die parametrisiert werden können
  2. Identifizieren Sie Tests, die aufgeteilt werden sollten
  3. besseres Verständnis des getesteten Fehlermodus
  4. indirekt weitere Dokumentation zu den Tests hinzufügen
  5. identifizieren, wo Fehlermeldungen konsistenter sein könnten
  6. Identifizieren Sie Tests, die redundant sind
  7. helfen, Fehlermeldungen zu verbessern
  8. Identifizieren Sie Tests, die derzeit aus dem falschen Grund bestehen.

Das sind alles nützliche Dinge, da stimme ich voll und ganz zu. Aber das ist nicht einfach, und wenn wir diese Dinge aus dieser Ausgabe herausholen wollen, dann ist diese Ausgabe nichts für Anfänger. Natürlich müssen Anfänger nicht all diese Dinge auf einmal tun, aber ich habe immer noch das Gefühl, dass diese PRs, die Asserts hinzufügen, oft ziemlich nahe daran sind, "blind die aktuelle Fehlermeldung zum pytest.raises-Aufruf hinzuzufügen", ohne etwas zu tun weiter (die obigen Punkte).

Wenn die oben genannten Punkte diese Übung nützlich machen, sind es meiner Meinung nach konkretere Anweisungen dazu, die ich an den Anfang dieses Themas stellen sollte.


Um es klar zu sagen, ich bin für bessere Fehlermeldungen und bessere Tests, die bestätigen, dass wir diese Fehlermeldungen haben und behalten . Aber wir haben auch begrenzte Zeit, und jede PR erfordert Zeit und Mühe, um sie durchzuführen und zu überprüfen, und es stellt sich die Frage, wo die Mühe am besten investiert wird.
IMO, es wäre sinnvoller, sich stattdessen auf das "Fixieren von bloßen Pytest-Raises" zu konzentrieren, anstatt sich auf das "Verbessern von Fehlermeldungen" zu konzentrieren (und währenddessen besser zu testen).

Wenn die oben genannten Punkte diese Übung nützlich machen, sind es meiner Meinung nach konkretere Anweisungen dazu, die ich an den Anfang dieses Themas stellen sollte.

Es kann sinnvoll sein, ein größeres Problem zu erstellen, um diese zu verfolgen (andere Probleme, die es wert sind, in ein solches Problem aufgenommen zu werden, sind https://github.com/pandas-dev/pandas/issues/19159 und https://github.com/pandas- dev/pandas/issues/21575).

Dieser Teil an sich ist in sich abgeschlossen und für Anfänger sehr zugänglich.

@gfyoung Wie hängen die von Ihnen

Sie beziehen sich auf den Kommentar, den Sie explizit von @simonjayhawkins eingeführt

31072 enthält die fehlende Übereinstimmung in stata.py

Wie hier https://github.com/pandas-dev/pandas/pull/31091#issuecomment -575422207 Ich bin mit @jorisvandenbossches Idee, dass wir keine Fehlermeldungen von externen Paketen testen die markieren?

Wenn wir bestimmte Fehlermeldungen wirklich nicht testen möchten (ich könnte der Fairness halber auf externe gehen), sollten wir meiner Meinung nach einfach eine Hilfsfunktion wie diese erstellen:

~pythondef external_error_raised(expected_Exception):pytest.raises zurückgeben (expected_Exception, match=None)~

Dies wird unserem zukünftigen Selbst klar machen, dass dies ein Nicht-Pandas-Fehler ist, und das match=None dient dazu, jeden Linting-Check zu beschwichtigen, den wir für bloße pytest Raises entwickeln.

Wenn wir bestimmte Fehlermeldungen wirklich nicht testen möchten (ich könnte der Fairness halber auf externe gehen), sollten wir meiner Meinung nach einfach eine Hilfsfunktion wie diese erstellen:

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

Dies wird unserem zukünftigen Selbst klar machen, dass dies ein Nicht-Pandas-Fehler ist, und das match=None dient dazu, jeden Linting-Check zu beschwichtigen, den wir für bloße pytest Raises entwickeln.

+1 .

Ich mag diese Idee wirklich, können wir sie zu einer Konvention für unsere Tests machen?

Wenn eine Funktion testet, ob eine Funktion/Methode einen Fehler auslöst und der Fehler ein externer Fehler ist, fügen wir einfach match=None in die Datei "pytest.raises``` ein.

können wir es zu einer Konvention für unsere Tests machen?

Damit meine ich, dass ich einen Abschnitt in das Handbuch "Beitragen" einfüge .

Wenn eine Funktion testet, ob eine Funktion/Methode einen Fehler auslöst und der Fehler ein externer Fehler ist, setzen wir einfach match=None in die Datei "pytest.raises```.

Ich würde die Hilfsfunktion bevorzugen, da Sie dann nicht daran denken müssen, diese hinzuzufügen. Außerdem ist der Name des Helfers viel klarer, warum wir es tun.

Wenn wir bestimmte Fehlermeldungen wirklich nicht testen möchten (ich könnte der Fairness halber auf externe gehen), sollten wir meiner Meinung nach einfach eine Hilfsfunktion wie diese erstellen:

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

Dies wird unserem zukünftigen Selbst klar machen, dass dies ein Nicht-Pandas-Fehler ist, und das match=None dient dazu, jeden Linting-Check zu beschwichtigen, den wir für bloße pytest Raises entwickeln.

@gfyoung wo empfehlen Sie, diese

pandas._testing

Hallo,

Ich möchte arbeiten an:

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

Hallo - ich würde gerne arbeiten an:

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

Hallo zusammen, ich nehme folgendes:

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 dieser ist bereits fertig, aber noch nicht als erledigt markiert:
pandas/tests/arithmetic/test_numeric.py

AKTUALISIEREN

@MomIsBestFriend diese auch:
pandas/tests/arithmetic/test_period.py
pandas/tests/arrays/test_integer.py
pandas/tests/arrays/test_period.py

Diese sind in #31852 enthalten

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

Ich werde nehmen

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
Diese sind ohne die Markierung gemacht:

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

pandas/tests/indexes/datetimes/test_tools.py existiert nicht

Ich werde tun:

  • 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

Ich habe den ursprünglichen Beitrag aktualisiert, jetzt, da es ein Skript gibt, um bloße pytest raises ich Anweisungen zur Verwendung beigefügt. Wenn noch jemand Fragen hat, können Sie ihn gerne stellen:)

Ich werde nehmen,

pandas/tests/arithmetic/test_timedelta64.py

pandas/tests/skalar/timestamp/test_arithmetic.py
pandas/tests/skalar/timestamp/test_comparisons.py
pandas/tests/skalar/timestamp/test_constructors.py
pandas/tests/scalar/timestamp/test_timezones.py
pandas/tests/skalar/timestamp/test_unary_ops.py

anscheinend sind alle Tests in pandas/tests/scalar/timestamp/ bereits behoben.

$ 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 => fehlt.

Ich nehme
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 => kein Problem
pandas/tests/scalar/timestamp/test_comparisons.py => kein Problem
pandas/tests/scalar/timestamp/test_constructors.py => kein Problem
pandas/tests/scalar/timestamp/test_timezones.py => kein Problem
pandas/tests/scalar/timestamp/test_unary_ops.py => kein Problem

pandas/tests/arrays/test_boolean.py => fehlt.

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 => kein Problem
pandas/tests/groupby/test_timegrouper.py => kein Problem

pandas/tests/indexes/categorical/test_category.py => kein Problem
pandas/tests/indexes/common.py #33144
pandas/tests/indexes/datetimelike.py #33144

pandas/tests/indexes/interval/test_astype.py => alle betroffenen Tests sind als xfailed markiert, müssen wir noch beheben, ist also wie?

pandas/tests/indexes/multi/test_compat.py #33144
pandas/tests/indexes/multi/test_duplicates.py => kein Problem
pandas/tests/indexes/multi/test_format.py => Datei nicht gefunden.
pandas/tests/indexes/multi/test_reshape.py #33144
pandas/tests/indexes/multi/test_setops.py => kein Problem
pandas/tests/indexes/multi/test_sorting.py #33144

@sumanau7 haben Sie die Dateien

Fertig mit

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

ich arbeite mit

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

Arbeiten an:

pandas/tests/reshape/merge/test_multi.py

Ich werde nehmen:
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

Ich nehme auch:

  • 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

Hi,
Ich bin ein neuer Entwickler des Projekts und möchte dabei helfen. Welcher der verbleibenden Tests ist für Anfänger am besten geeignet?

Vielen Dank,
Kevin

Hi,
Ich bin ein neuer Entwickler des Projekts und möchte dabei helfen. Welcher der verbleibenden Tests ist für Anfänger am besten geeignet?

Vielen Dank,
Kevin

Willkommen - ich glaube nicht, dass dies einfacher oder schwieriger ist als alle anderen, jeder wäre ein guter Anfang

Ich erhalte einen Fehler beim Ausführen des Skripts valid_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>

Es tritt auf, wenn 'pandas/tests/test_strings.py' gelesen wird. Alle Dateien sind als cp1252 codiert.

Ich wollte das Skript ausführen, um zu überprüfen, welche Tests noch nicht abgeschlossen sind, um Doppelarbeit zu vermeiden.

Die meisten NotImplementedError s haben keine spezifische Nachricht, die abgeglichen werden muss, ich weiß, dass dies den Zweck verfehlt, aber ist es eine gute Idee, sie in pytest.raises(NotImplementedError, match=None) zu ändern, nur um den Linter zum Schweigen zu bringen? ?

Ich werde nehmen:

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

anfangen.

-Kevin

Ich bin neu in diesem Bereich, also fange ich damit an:

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

Hallo, ich bin neu im Beitragen. Danke für die übersichtliche Darstellung in der Ausgabe. Ich fange damit an, pandas/tests/generic/test_duplicate_labels.py , und werde weitere angehen, wenn es klappt.

Ich nehme pandas/tests/arrays/test_datetimelike.py als Anfang.
Auch wenn Sie python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/ erfolgreich ausführen können, versuchen Sie es mit
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/**/*.py stattdessen

Der einfachste Weg, es jetzt auszuführen, wäre, hinzuzufügen

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

zu .pre-commit-config.yaml im Abschnitt - repo: local und dann ausführen

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

Ich habe das Problem mit den verbleibenden ausstehenden Dateien aktualisiert

Ich kann diese nehmen:

  • [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

Dies sind die Top 5 in der Liste (Stand heute).

@marktgraham Wenn Sie test_datetime.py noch nicht gemacht haben. Bitte lass es in Ruhe, da ich kurz davor bin eine PR zu machen

@liaoaoyuan97 keine Sorge, ich habe test_datetimelike.py noch nicht angerührt.

Ich werde stattdessen pandas/tests/extension/base/getitem.py nehmen.

validate_unwanted_patterns.py einen Fehler auf meiner Seite

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

Scheint vielleicht mit #37419 verwandt zu sein?

Ich habe es mit dem von @MarcoGorelli vorgeschlagenen Ansatz

Der einfachste Weg, es jetzt auszuführen, wäre, hinzuzufügen

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

zu .pre-commit-config.yaml im Abschnitt - repo: local und dann ausführen

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

Ist es sinnvoll, dies zu .pre-commit-config.yaml hinzuzufügen und dann die Anweisungen in diesem Thread zu aktualisieren?

Ist es sinnvoll, dies der .pre-commit-config.yaml hinzuzufügen und dann die Anweisungen in diesem Thread zu aktualisieren?

Wir werden es zu .pre-commit-config.yaml hinzufügen, sobald alle Fehler behoben sind, ja

Scheint vielleicht mit #37419 verwandt zu sein?

Nein, es hängt mit #37379 zusammen (wo wir dieses Skript auf Pre-Commit verschoben haben, daher war es nicht mehr notwendig, dass es in Verzeichnissen ausgeführt wird)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen