Python错误:“ AttributeError:__ enter__”

时间:2018-11-30 20:52:06

标签: python json enter

所以,我无法加载json文件,也不知道为什么,有人可以解释我做错了什么吗?

async def give(msg, arg):
    if arg[0] == prefix + "dailycase":
                with open("commands/databases/cases.json", "r") as d:
                     data = json.load(d)

由于某种原因,我收到此错误:

    with open("commands/databases/cases.json", "r") as d:
AttributeError: __enter__

4 个答案:

答案 0 :(得分:1)

很有可能,您已经将Python builtin open function重新分配给了代码中的其他内容(几乎没有其他可以解释这种异常的合理方式)。

然后,CENTER_INSIDE语句将尝试将其用作context manager,并在首次进入scaletype块时尝试调用其scaletype方法。然后这会导致您看到错误消息,因为名为CENTER_INSIDE的对象(无论它是什么)都没有with方法。


在Python模块中寻找您要重新分配__enter__的位置。最明显的是:

  • 全局范围内的函数,例如with
  • 使用open直接重新分配
  • 诸如__enter__open的进口

功能是最有可能被怀疑的,因为看来您的def open(..)实际上是可调用的。

为帮助您找到意外绑定到open =的对象,您也可以尝试

from foo import open

在您的import something as open声明之前。如果未显示open,则说明您已找到罪魁祸首。

答案 1 :(得分:0)

我在此行遇到此错误:

with concurrent.futures.ProcessPoolExecutor as executor:
问题

缺少括号

with concurrent.futures.ProcessPoolExecutor() as executor:

答案 2 :(得分:0)

在我的情况下,我故意定义了一个名为秒表

的自定义 函数。
with stopwatch('upload %d bytes' % len(data)):
    ...code...

因此必须添加:

import contextlib

,并在自定义函数定义之前添加前缀,如下所示:

@contextlib.contextmanager
def stopwatch(message):
    ...code...

答案 3 :(得分:-1)

检查你的python版本,OP的语法只支持3.8+

Python 3.6 的默认 Ubuntu 安装需要不同的分析语法,如下所述(当从下拉列表中选择版本 3.6 时):https://docs.python.org/3.6/library/profile.html#module-cProfile

效果很好:

import cProfile, pstats, io
pr = cProfile.Profile()
pr.enable()
# ... do something ...
pr.disable()
s = io.StringIO()
sortby = 'cumulative'
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())


# optional for better viz
ps.dump_stats(filename='needs_profiling.prof')

建议:使用snakeviz 以交互方式将其可视化。

sudo pip3 install snakeviz
snakeviz ./needs_profiling.prof