python / python/cpython

ValueError: illegal newline value on 0x85 (NEL)

Ouverte
#97,544 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

interpreter-core type-feature
Langage dominant
Python
Étoiles
77.2k
Forks
36k
Métriques de merge des PR
Métriques de PR en attente

Description

In attempting to harmonize the path pie implementation with more modern constructs, I'm seeking also to utilize the newline argument to open instead of explicitly substituting characters.

When I do, however, I find that some tests start to fail when NEL is passed as a newline character:

$ py -c "open('foo', 'w', newline='\x85')"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ValueError: illegal newline value: …

At least in some contexts, Python recognizes NEL as a line separator:

>>> 'a\x85b\x1ec'.splitlines()
['a', 'b', 'c']

See also #66428 for some background.

According to the wikipedia article, a conforming application should honor a number of characters as newlines:

>>> newlines = '\x0a', '\x0b', '\x0c', '\x0d', '\x0d\x0a', '\u0085', '\u2028', '\u2029'
>>> for candidate in newlines:
...   try: x=open('foo', 'w', newline=candidate)
...   except ValueError: print('failed on', repr(candidate))
... 
failed on '\x0b'
failed on '\x0c'
failed on '\x85'
failed on '\u2028'
failed on '\u2029'

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le reproducer signalé de open(..., newline=...) et comparez-le à str.splitlines() pour les caractères de nouvelle ligne indiqués. Suivez la gestion des entrées/sorties texte de CPython pour la validation de newline, puis identifiez ou ajoutez les tests pertinents. Le travail est terminé lorsque les valeurs de newline prévues ont un comportement défini et testé, sans régression dans la traduction existante de newline.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.