所以,我无法加载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__
答案 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