Python Error: "AttributeError: __enter__"
Python Error: "AttributeError: __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__
很可能,您已将 Python builtin open
function 重新分配给代码中的其他内容(几乎没有其他合理的方式可以解释此异常 ).
with
语句将尝试将其用作 context manager,并在首次进入 with
块时尝试调用其 __enter__
方法。这会导致您看到错误消息,因为您的对象 open
,无论它是什么,都没有 __enter__
方法。
在您的 Python 模块中寻找重新分配 open
的位置。最明显的是:
- 全局范围内的函数,如
def open(..)
- 使用
open =
直接重新分配
- 导入
from foo import open
或 import something as open
函数最有可能是可疑的,因为看起来你的open
实际上是一个可调用函数。
为了帮助您找到 open
意外绑定到的对象,您也可以尝试
print('open is assigned to %r' % open)
紧接在您的 with
声明之前。如果它没有显示 <built-in function open>
,您就找到了罪魁祸首。
我在这一行遇到了这个错误:
with concurrent.futures.ProcessPoolExecutor as executor:
缺少括号 是问题所在
with concurrent.futures.ProcessPoolExecutor() as executor:
就我而言,我有意定义了一个名为 stopwatch
的自定义 with 函数
with stopwatch('upload %d bytes' % len(data)):
...code...
因此必须添加:
import contextlib
并为自定义函数定义加上前缀:
@contextlib.contextmanager
def stopwatch(message):
...code...
我的问题是我希望 os.open
像内置 open
...
一样工作
这导致 AttributeError: __enter__
import os
with os.open('out.txt', os.CREAT) as f:
f.write('hello world')
这不
with open('out.txt', 'w') as f:
f.write('hello world')
我想 from os import open
很容易导致 OP 问题。
所以,我无法加载我的 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__
很可能,您已将 Python builtin open
function 重新分配给代码中的其他内容(几乎没有其他合理的方式可以解释此异常 ).
with
语句将尝试将其用作 context manager,并在首次进入 with
块时尝试调用其 __enter__
方法。这会导致您看到错误消息,因为您的对象 open
,无论它是什么,都没有 __enter__
方法。
在您的 Python 模块中寻找重新分配 open
的位置。最明显的是:
- 全局范围内的函数,如
def open(..)
- 使用
open =
直接重新分配
- 导入
from foo import open
或import something as open
函数最有可能是可疑的,因为看起来你的open
实际上是一个可调用函数。
为了帮助您找到 open
意外绑定到的对象,您也可以尝试
print('open is assigned to %r' % open)
紧接在您的 with
声明之前。如果它没有显示 <built-in function open>
,您就找到了罪魁祸首。
我在这一行遇到了这个错误:
with concurrent.futures.ProcessPoolExecutor as executor:
缺少括号 是问题所在
with concurrent.futures.ProcessPoolExecutor() as executor:
就我而言,我有意定义了一个名为 stopwatch
的自定义 with 函数with stopwatch('upload %d bytes' % len(data)):
...code...
因此必须添加:
import contextlib
并为自定义函数定义加上前缀:
@contextlib.contextmanager
def stopwatch(message):
...code...
我的问题是我希望 os.open
像内置 open
...
这导致 AttributeError: __enter__
import os
with os.open('out.txt', os.CREAT) as f:
f.write('hello world')
这不
with open('out.txt', 'w') as f:
f.write('hello world')
我想 from os import open
很容易导致 OP 问题。