导入 functools 后出现 Cannot import name 'MappingProxyType' 错误
Cannot import name 'MappingProxyType' error after importing functools
导入 functools 后,我从解释器收到这样的消息:
Traceback (most recent call last):
File "C:/Users/Admin/Documents/Python/decorator.py", line 1, in
import functools
File "C:\Python3\lib\functools.py", line 22, in
from types import MappingProxyType
ImportError: cannot import name 'MappingProxyType'
import functools
def trace(func):
def inner(*args, **kwargs):
print(func.__name__, args, kwargs)
return func(*args, **kwargs)
functools.update_wrapper(inner, func)
return inner
@trace
def foo(x):
return x
foo(42)
使用 PyCharm 作为 IDE 和 CPython 作为解释器
这不是真正的答案,而是评论。
首先:我无法验证所提出的问题:问题中的代码在我正在使用的标准 python 中完美运行。
其次:我偶然发现了这个问题,因为我收到了相同的错误消息,但可能出于不同的原因。我不小心将一个模块命名为"type"。奇怪的是,python 框架在解析导入系统模块中的引用时选择了这个新的 "type" 模块。这表明 python 的解析引用算法有点......嗯......有点非常简单的设计。
然而,如果读者收到此错误消息,请先检查您是否不小心在代码中的某处命名了某些内容 "type" 作为解决该问题的第一种方法,然后再检查该错误消息的其他原因。
更新: 这是Python中比较普遍的现象。当心!每当你给你的模块起一个已经被任何导入的 Python 模块使用的名字时(你可能不知道这些名字!)你将有可能得到或多或少类似于所描述的奇怪错误在问题中。
接受的解决方案强制您重命名您的模块,但是:
在你的包中有一个名为 types
的模块没有错,实际上如果解释器是 运行 当前目录或 PYTHONPATH
你会得到这个错误目录设置为包含模块的目录。
如果避免这种情况,就不必重命名模块。
如果您使用 IDE,请检查 运行 配置以确保 PYTHONPATH
或当前目录未设置为包含您的模块。
导入 functools 后,我从解释器收到这样的消息:
Traceback (most recent call last): File "C:/Users/Admin/Documents/Python/decorator.py", line 1, in import functools File "C:\Python3\lib\functools.py", line 22, in from types import MappingProxyType ImportError: cannot import name 'MappingProxyType'
import functools
def trace(func):
def inner(*args, **kwargs):
print(func.__name__, args, kwargs)
return func(*args, **kwargs)
functools.update_wrapper(inner, func)
return inner
@trace
def foo(x):
return x
foo(42)
使用 PyCharm 作为 IDE 和 CPython 作为解释器
这不是真正的答案,而是评论。
首先:我无法验证所提出的问题:问题中的代码在我正在使用的标准 python 中完美运行。
其次:我偶然发现了这个问题,因为我收到了相同的错误消息,但可能出于不同的原因。我不小心将一个模块命名为"type"。奇怪的是,python 框架在解析导入系统模块中的引用时选择了这个新的 "type" 模块。这表明 python 的解析引用算法有点......嗯......有点非常简单的设计。
然而,如果读者收到此错误消息,请先检查您是否不小心在代码中的某处命名了某些内容 "type" 作为解决该问题的第一种方法,然后再检查该错误消息的其他原因。
更新: 这是Python中比较普遍的现象。当心!每当你给你的模块起一个已经被任何导入的 Python 模块使用的名字时(你可能不知道这些名字!)你将有可能得到或多或少类似于所描述的奇怪错误在问题中。
接受的解决方案强制您重命名您的模块,但是:
在你的包中有一个名为 types
的模块没有错,实际上如果解释器是 运行 当前目录或 PYTHONPATH
你会得到这个错误目录设置为包含模块的目录。
如果避免这种情况,就不必重命名模块。
如果您使用 IDE,请检查 运行 配置以确保 PYTHONPATH
或当前目录未设置为包含您的模块。