AttributeError:'module'对象在运行cProfile时没有属性'maketrans'

Dop*_*ger 5 python profiler

使用python 2.7我收到此错误:

    Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.7/cProfile.py", line 199, in <module>
    main()
  File "/usr/lib/python2.7/cProfile.py", line 165, in main
    from optparse import OptionParser
  File "/usr/lib/python2.7/optparse.py", line 77, in <module>
    import textwrap
  File "/usr/lib/python2.7/textwrap.py", line 32, in <module>
    class TextWrapper:
  File "/usr/lib/python2.7/textwrap.py", line 74, in TextWrapper
    whitespace_trans = string.maketrans(_whitespace, ' ' * len(_whitespace))
AttributeError: 'module' object has no attribute 'maketrans'
Run Code Online (Sandbox Code Playgroud)

在运行这个简单的代码时:

def blah():
    orig = ""
    for i in range(1000000):
        orig += "zim";
blah()
Run Code Online (Sandbox Code Playgroud)

使用此电话:

$ python -m cProfile string.py
Run Code Online (Sandbox Code Playgroud)

我正在使用Ubuntu Natty Narwhal,并安装了包python-profiler(我不知道是否有必要).

小智 7

正如关于模块Python教程解释:

实际上,在变量sys.path给出的目录列表中搜索模块,该变量从包含输入脚本(或当前目录),PYTHONPATH和依赖于安装的默认值的目录初始化.这允许Python程序知道他们正在做什么来修改或替换模块搜索路径.请注意,因为包含正在运行的脚本的目录位于搜索路径上,所以脚本与标准模块的名称不同是很重要的,否则Python将在导入该模块时尝试将脚本作为模块加载.

textwrap没有import string.您的脚本已命名string.py并且在搜索路径上排在第一位(或至少在stdlib目录之前),因此会导入该脚本.但它没有定义预期的函数和常量,例如它没有maketrans模块.这就是错误告诉你的.

(如果您只运行脚本而不进行性能分析,则会出现相同的错误.)

  • 故事的道德:永远不要将程序命名为stdlib模块. (8认同)