`csv.Sniffer.sniff()` raises `Could not determine delimiter` when the sample contains a field larger than field_size_limit()
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
Bug description:
Summary
csv.Sniffer().sniff() raises csv.Error: Could not determine delimiter for a sample whose first row contains a field longer than the current csv.field_size_limit() (131072 by default), even when every following row is consistently delimited.
Reproduction Code
import csv
sample = 'a,"' + 'x' * 200_000 + '",b\n' + 'c,d,e\n' * 50
print(csv.Sniffer().sniff(sample).delimiter)
Actual Behavior
Traceback (most recent call last):
File "repro.py", line 4, in <module>
print(csv.Sniffer().sniff(sample).delimiter)
~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "Lib/csv.py", line 384, in sniff
raise Error("Could not determine delimiter")
_csv.Error: Could not determine delimiter
Expected Behavior
sniff() should return a dialect with `delimiter=','
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-157689
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduziere den Fehler mit dem Beispiel aus dem Issue und untersuche anschließend in Lib/csv.py den Bereich um Sniffer.sniff(). Prüfe, wie sich field_size_limit auf die Erkennung des Trennzeichens auswirkt, und verifiziere, dass das Beispiel einen Dialekt zurückgibt, dessen Trennzeichen ein Komma ist, ohne das Verhalten des Limits abzuschwächen. Der im Issue verlinkte PR gh-157689 weist darauf hin, dass diese Arbeit möglicherweise bereits begonnen hat.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 35/100