关于python:导入functools后无法导入名称’MappingProxyType’错误

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模块的名称时(您可能不知道这些名称!)您将有机会或多或少地得到与问题中描述的错误相似的奇怪错误。