我有一个名为@asynccontextmanager
的{{1}}方法,它是类opened()
的实例方法。有时我会像File
这样错误地使用类来调用它。然后失败,因为该对象未初始化(例如,名称),并没有真正表达问题的错误。
AttributeError:“ str”对象没有“打开”属性
有办法防止这种情况吗?
File.opened()
应该可以:
class File:
def __init__(self, file_name):
self.file_name = file_name
@asynccontextmanager
async def opened(self):
open(self.file_name)
# do other things
但是他应该产生一个错误,告诉我在不首先创建对象的情况下不能使用实例方法:
file = File('input.csv')
async with file.opened() as file_handle:
#do stuff
答案 0 :(得分:1)
您可以检查self
是否是File
的实例,以便通过友好的错误消息引发异常:
@asynccontextmanager
async def opened(self):
if not isinstance(self, File):
raise RuntimeError('opened() must be called as a method bound to a File instance.')
open(self.file_name)