Cannot import name 'MappingProxyType' error after importing 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'
号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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中工作得很好。
第二:我偶然发现这个问题是因为我有相同的错误信息,但可能是因为不同的原因。我不小心把一个模块命名为"类型"。奇怪的是,在从导入的系统模块中解析引用时,python框架选择了这个新的"类型"模块。这说明python的引用解析算法有点…好。。。设计有点简单。
不过,如果读者收到此错误消息,请首先检查是否在代码中的某个地方意外地将某个"类型"命名为解决问题的第一种方法,然后再检查该错误消息的其他原因。
更新:这是Python中非常常见的现象。小心!每当您为模块指定一个已经用于任何导入的python模块的名称时(您可能不知道这些名称!)您将有机会或多或少地得到与问题中描述的错误相似的奇怪错误。