Confusing error message when options for `python` are erroneously quoted
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Bug report
Bug description:
#!/bin/python -q -i
I was writing an unrelated post about shebang lines tricks+tips, and happened to pick python as an example, only to discover some weird behavior. The above gets parsed as /bin/python "-q -i" <path/to/script>
But the message python prints is quite confusing:
Unknown option: -
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
What's happening is that the "unknown option" is a single space, being parsed as a short-form option, and printed. But the output is pretty opaque, since the space is not quoted, and it's just a trailing invisible space.
Aside: Several other invalid one-byte options like \n get printed wrongly. This doesn't seem worth fixing.
Proposed fix:
I think the shebang case happens to users often enough that it would be good to have some kind of better error message if a short-form options list contains either of
-(this would require scanning ahead!), which either indicates some quoting problem, or an incorrect long-form option (-check-hash-based-pycsrather than--check-hash-based-pycs).
I think a good error message could be unknown option: -q -i or unknown option: "-q -i". Quoting the argument when it contains a space seems clearer to me.
The current long-form options have pretty clear error messages either way, mostly by happenstance.
Currently, -help-* parses as -h which then prints help, stopping option parsing. I have no strong opinion about whether that behavior is better or worse than printing an error message.
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci l’invocazione shebang segnalata /bin/python -q -i ed esamina l’analisi delle opzioni della riga di comando di CPython e gli entry point per la segnalazione degli errori. Concentrati su come una stringa di opzioni tra virgolette diventa un’opzione in forma breve, quindi verifica che la diagnostica risultante identifichi visibilmente l’argomento non valido senza modificare il comportamento di opzioni non valide di un byte non correlate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- cli
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100