This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年10月05日 11:08 by adambyrtek, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| fixargparse.patch | elazar, 2013年09月01日 21:10 | patch for argparse | review | |
| argparse_ugly.patch | elazar, 2013年09月11日 18:42 | no wrapping below width=30. +basic test | review | |
| argparse_less_ugly.patch | serhiy.storchaka, 2013年09月12日 21:56 | review | ||
| Messages (10) | |||
|---|---|---|---|
| msg144947 - (view) | Author: Adam Byrtek (adambyrtek) | Date: 2011年10月05日 11:08 | |
Code snippet from optparse.py:
344 self.help_position = min(max_len + 2, self.max_help_position)
345 self.help_width = self.width - self.help_position
Where self.width is initialized with the COLUMNS environment variable. On narrow terminals it can happen that self.help_position < self.width, leading to an exception in textwrap.py:
raise ValueError("invalid width %r (must be > 0)" % self.width)
ValueError: invalid width -15 (must be > 0)
A reasonable workaround would be to trim part of the help text instead of causing an exception.
|
|||
| msg145145 - (view) | Author: Ezio Melotti (ezio.melotti) * (Python committer) | Date: 2011年10月07日 21:13 | |
argparse has some similar code in Lib/argparse.py:489. Can you reproduce the problem with argparse? If you can't and argparse solved the problem already, we might adopt the same solution; if you can, it should be fixed there too. |
|||
| msg196455 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2013年08月29日 10:57 | |
Yes, argparse has same problem. >>> import os, argparse >>> p = argparse.ArgumentParser(prog='PROG') >>> os.environ['COLUMNS'] = '16' >>> print(p.format_help()) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/serhiy/py/cpython/Lib/argparse.py", line 2329, in format_help return formatter.format_help() File "/home/serhiy/py/cpython/Lib/argparse.py", line 276, in format_help help = self._root_section.format_help() File "/home/serhiy/py/cpython/Lib/argparse.py", line 206, in format_help func(*args) File "/home/serhiy/py/cpython/Lib/argparse.py", line 206, in format_help func(*args) File "/home/serhiy/py/cpython/Lib/argparse.py", line 514, in _format_action help_lines = self._split_lines(help_text, help_width) File "/home/serhiy/py/cpython/Lib/argparse.py", line 614, in _split_lines return _textwrap.wrap(text, width) File "/home/serhiy/py/cpython/Lib/textwrap.py", line 355, in wrap return w.wrap(text) File "/home/serhiy/py/cpython/Lib/textwrap.py", line 300, in wrap return self._wrap_chunks(chunks) File "/home/serhiy/py/cpython/Lib/textwrap.py", line 227, in _wrap_chunks raise ValueError("invalid width %r (must be > 0)" % self.width) ValueError: invalid width 0 (must be > 0) |
|||
| msg196740 - (view) | Author: Elazar Gershuni (elazar) * | Date: 2013年09月01日 21:10 | |
I think in such case it is reasonable to fail silently, since the information will not be readable anyway. Is a patch like the attached acceptable? (Sorry, I am new here) results: >>> import os, argparse; p = argparse.ArgumentParser(prog='PROG') >>> os.environ['COLUMNS'] = '0' >>> print(p.format_help()) usage: PROG [-h] optional arguments: -h, --help >>> |
|||
| msg196802 - (view) | Author: Dmi Baranov (dmi.baranov) * | Date: 2013年09月02日 18:33 | |
I think "ugly look is better than silence" here. Elazar, can you touch a optparse too (with some tests - test.support.EnvironmentVarGuard context manager will be helpful here)? |
|||
| msg196804 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2013年09月02日 20:47 | |
> I think "ugly look is better than silence" here. Agree. We have two possibilities: 1. Decrease an indentation. There is a lot of blank spaces below option's names. 2. Set some minimal width (10 or 20 characters) and let lines wrap out. For better look we should use both methods. |
|||
| msg197502 - (view) | Author: Elazar Gershuni (elazar) * | Date: 2013年09月11日 18:42 | |
ok. how about argparse_ugly.patch? below some width it simply won't do any wrapping. (I hadn't touch optparse yet) |
|||
| msg197544 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2013年09月12日 21:56 | |
Here is less ugly patch (for argparse and optparse). Instead of prohibiting wrapping at all for small width, it limits minimal width of formatted text. It try first decrease the indent for help. |
|||
| msg207795 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2014年01月09日 21:19 | |
New changeset 779de7b4909b by Serhiy Storchaka in branch '2.7': Issue #13107: argparse and optparse no longer raises an exception when output http://hg.python.org/cpython/rev/779de7b4909b New changeset c6c30b682e14 by Serhiy Storchaka in branch '3.3': Issue #13107: argparse and optparse no longer raises an exception when output http://hg.python.org/cpython/rev/c6c30b682e14 New changeset 48bcd03cd29f by Serhiy Storchaka in branch 'default': Issue #13107: argparse and optparse no longer raises an exception when output http://hg.python.org/cpython/rev/48bcd03cd29f |
|||
| msg207797 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2014年01月09日 21:27 | |
Thank you Adam for your report. Thank you Elazar for your patch. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:22 | admin | set | github: 57316 |
| 2014年02月17日 11:31:19 | serhiy.storchaka | link | issue13720 superseder |
| 2014年01月09日 21:27:18 | serhiy.storchaka | set | status: open -> closed messages: + msg207797 assignee: serhiy.storchaka resolution: fixed stage: patch review -> resolved |
| 2014年01月09日 21:19:16 | python-dev | set | nosy:
+ python-dev messages: + msg207795 |
| 2013年09月12日 21:56:41 | serhiy.storchaka | set | files:
+ argparse_less_ugly.patch messages: + msg197544 stage: test needed -> patch review |
| 2013年09月11日 18:42:17 | elazar | set | files:
+ argparse_ugly.patch messages: + msg197502 |
| 2013年09月02日 20:47:41 | serhiy.storchaka | set | messages: + msg196804 |
| 2013年09月02日 18:33:01 | dmi.baranov | set | nosy:
+ dmi.baranov messages: + msg196802 |
| 2013年09月01日 21:10:53 | elazar | set | files:
+ fixargparse.patch nosy: + elazar messages: + msg196740 keywords: + patch |
| 2013年08月29日 10:57:16 | serhiy.storchaka | set | assignee: serhiy.storchaka -> (no value) messages: + msg196455 versions: + Python 2.7, Python 3.3, Python 3.4 |
| 2013年08月26日 09:17:40 | serhiy.storchaka | set | assignee: serhiy.storchaka nosy: + serhiy.storchaka |
| 2013年08月17日 14:08:52 | ezio.melotti | set | keywords:
+ easy stage: needs patch -> test needed |
| 2011年10月09日 23:07:36 | ezio.melotti | set | nosy:
+ bethard, aronacher |
| 2011年10月07日 21:13:20 | ezio.melotti | set | nosy:
+ ezio.melotti messages: + msg145145 stage: needs patch |
| 2011年10月05日 11:08:22 | adambyrtek | create | |