要学习argparse模块,我已从官方文档站点复制了一些代码。
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print (args.accumulate(args.integers))
但是当我输入
时python argparseTesting.py
在命令行中,然后出现以下错误:
test
case
with
strings
0
1
2
3
0
1
2
3
At Index 0 of our array, we have pens
At Index 1 of our array, we have staplers
At Index 2 of our array, we have flame-throwers
At Index 3 of our array, we have binders
Traceback (most recent call last):
File "optparser_short.py", line 1, in <module>
import argparse
File "/usr/local/lib/python2.7/argparse.py", line 90, in <module>
import textwrap as _textwrap
File "/usr/local/lib/python2.7/textwrap.py", line 40, in <module>
class TextWrapper:
File "/usr/local/lib/python2.7/textwrap.py", line 82, in TextWrapper
whitespace_trans = string.maketrans(_whitespace, ' ' * len(_whitespace))
AttributeError: 'module' object has no attribute 'maketrans'
在AttributeError: 'module' object has no attribute 'maketrans'中,我读到了几乎相同的问题。但那里的建议没有帮助。我有python版本2.7.11。
我希望有人可以提供帮助。
最好的问候,
答案 0 :(得分:5)
您几乎肯定在Python模块搜索路径中有一个名为string.py
的本地Python文件。它掩盖了标准的string
库。
通过添加:
找到它import string; print(string.__file__)
到您的argparseTesting.py
脚本,运行它就像之前运行它一样,然后重命名或删除由该行打印的文件string.py
文件,这些文件不在/usr/local/lib/python2.7
中。不要忘记清理它旁边的string.pyc
文件。您可能不得不多次执行此操作,具体取决于sys.path
上有多少位置具有此类文件。 请勿对/usr/local/lib/python2.7/string.py
执行此操作,即库版本。
你的名字并不重要;关键是Python应该不在名称string
下找到它。它应该找到标准库模块。
确保在与argparseTesting.py
脚本相同的上下文中运行它; Python寻找额外模块的第一个地方是与脚本相同的目录,但是如果你不运行你的脚本,那么你可能会从不同的目录运行不同的代码而不会看到该文件正在导入
此处还有其他两种可能性,但仅当上述内容显示路径/usr/local/lib/python2.7/string.py
或/usr/local/lib/python2.7/string.pyc
时才适用。在这种情况下,要么已编辑该文件(您需要将其还原,2.7.11版本位于in the Python code repository),或者某些其他代码已从{删除该名称带有string
的{1}}模块。此类代码必须通过site
或user
配置挂钩运行。