【问题标题】:python3.6 ImportError: cannot import name 'reduce'python3.6 ImportError:无法导入名称'reduce'
【发布时间】:2017-07-27 10:59:00
【问题描述】:
from functools import reduce

我使用的是 python 3.6.2,这是唯一显示以下错误的代码:

Traceback (most recent call last):
 File "D:\Pythons\oop.py", line 50, in <module>
from functools import reduce   
ImportError: cannot import name 'reduce'
Process returned 1 (0x1)   execution time : 0.145 s

我会发现这个问题,因为我在另一个代码中犯了错误,

from enum import Enum

报错:

Traceback (most recent call last):
  File "D:\Pythons\oop.py", line 50, in <module>
from enum import Enum
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\enum.py", line 3, in <module>
from functools import reduce ImportError: cannot import name 'reduce'

所以我只看了enum. Py的源码,在第3行找到

from functools import reduce

女士们先生们,在centos7.2中安装python3.6.2是完全没有问题的,但是在安装Windows 10专业版下,会出现上面这些问题,好像我安装的问题,但是,很多时候我已经卸载了,反复安装了很多次,还是不行,不知道没有那些文件,谁能告诉我如何在windows环境下通过命令行安装?

【问题讨论】:

  • 所以python不能从functools导入reduce。我在 python 3 中都找不到名为 reduce 的类/方法。github.com/python/cpython/blob/3.6/Lib/functools.py - 这是在 python 2 中可用的docs.python.org/2/library/functools.html#functools.reduce
  • 该代码在使用 version3.6.0 的 python.org/shell 上运行良好。也许重新安装,或者使用所有 python 包进行完整安装?
  • 我刚刚安装了 3.6.2,但无法复制。 reduce 甚至列在documentation page
  • 听起来您将文件命名为您不应该使用的名称。
  • 为了澄清来自@user2357112 的评论,当我在路径上比预期导入更高的位置创建一个名为functools.py 的文件时遇到了这个错误。将您创建的文件重命名为functools.py。如果不是这种情况,那么您的安装很可能是错误的。

标签: python python-3.x


【解决方案1】:

Python 3.6 应该在 functools 中有 reduce。要调试您的问题,请尝试以下操作:

import functools
for obj in dir(functools):
    print(obj)

我希望输出类似于(在此处尝试:https://www.python.org/shell/):

MappingProxyType
RLock
WRAPPER_ASSIGNMENTS
WRAPPER_UPDATES
WeakKeyDictionary
_CacheInfo
_HashedSeq
__all__
__builtins__
__cached__
__doc__
__file__
__loader__
recursive_repr
__name__
__package__
__spec__
_c3_merge
_c3_mro
_compose_mro
_convert
_find_impl
_ge_from_gt
_ge_from_le
_ge_from_lt
_gt_from_ge
_gt_from_le
_gt_from_lt
_le_from_ge
_le_from_gt
_le_from_lt
_lru_cache_wrapper
_lt_from_ge
_lt_from_gt
_lt_from_le
_make_key
cmp_to_key
get_cache_token
lru_cache
namedtuple
partial
partialmethod
recursive_repr
reduce
singledispatch
total_ordering
update_wrapper
wraps

我的猜测不仅仅是 reduce 会丢失。无论如何,看起来卸载比重新安装更合适。您可能不小心编辑了文件或以某种方式损坏了它。有时 IDE 可能会将您带到该功能,并且很容易意外地对其进行编辑。

【讨论】:

  • builtins cached doc file loader name package spec functools 我刚刚展示了
【解决方案2】:

不要处理这些错误。只需尝试在您的代码中使用 functools

import functools 

# Create a list of strings: stark
stark = ['robb', 'sansa', 'arya', 'eddard', 'jon']

# Use reduce() to apply a lambda function over stark: result
result = functools.reduce((lambda item1,item2:item1 + item2), stark)

或类似:

# Import reduce from functools
from functools import reduce

# Create a list of strings: stark
stark = ['robb', 'sansa', 'arya', 'eddard', 'jon']

# Use reduce() to apply a lambda function over stark: result
result = reduce((lambda item1,item2:item1 + item2), stark)

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2014-10-10
    • 2014-09-20
    • 2014-08-28
    • 2014-06-10
    • 2016-05-16
    相关资源
    最近更新 更多