【问题标题】:Can not handle "AttributeError: 'module' object has no attribute 'maketrans'"无法处理“AttributeError:‘模块’对象没有属性‘maketrans’”
【发布时间】:2016-02-02 05:35:09
【问题描述】:

为了学习 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。

希望有人能帮忙。

最好的问候,

【问题讨论】:

  • 您有一个名为string.py 的本地文件。重命名它。
  • 重命名,好的,但是改成什么?制作trans.py ?
  • 没关系,只要不是和你要使用的内置模块同名即可。
  • 我改名了,还是一样的错误

标签: python module


【解决方案1】:

几乎可以肯定,您的 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 中删除了该名称带有del string.maketrans 的模块。此类代码必须通过 siteuser 配置挂钩运行。

【讨论】:

  • 我做到了,但同样的错误仍然存​​在。我将 string.py 重命名为 s.py,然后我删除了 string.pyc。但是出现了同样的错误。
  • @user3097712:import string; print(string.__file__) 现在显示什么?
  • 它说:回溯(最近一次调用最后):文件“str.py”,第 1 行,在 中导入字符串 ImportError:没有名为字符串的模块
  • @user3097712:那你之前删除了什么文件,那是什么路径?
  • 一开始你写的短脚本给了我'string.py',我把它改成了s.py。然后我删除'string.pyc'。这两个文件都在 /usr/local/lib/python2.7
猜你喜欢
  • 1970-01-01
  • 2017-04-07
  • 2010-11-18
相关资源
最近更新 更多