Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 即使定义了属性,类变量也是非类型的_Python_Async Await_Python Asyncio_Aio Mysql - Fatal编程技术网

Python 即使定义了属性,类变量也是非类型的

Python 即使定义了属性,类变量也是非类型的,python,async-await,python-asyncio,aio-mysql,Python,Async Await,Python Asyncio,Aio Mysql,我有一个类似这样的类: 类数据库测试: 定义初始化(自): self.headers={ “主机”:操作系统环境[“主机”], “用户名”:os.environ[“用户名”], “密码”:操作系统环境[“密码”] } self.db=无 self.cursor=None asyncio.create_任务(self._connect()) 异步定义连接(自): self.db=等待aimysql.connect(self.headers['host'],self.headers['usernam

我有一个类似这样的类:

类数据库测试:
定义初始化(自):
self.headers={
“主机”:操作系统环境[“主机”],
“用户名”:os.environ[“用户名”],
“密码”:操作系统环境[“密码”]
}
self.db=无
self.cursor=None
asyncio.create_任务(self._connect())
异步定义连接(自):
self.db=等待aimysql.connect(self.headers['host'],self.headers['username'],self.headers['password']))
self.cursor=等待self.db.cursor()
等待self.cursor.execute('use bot')
异步def_insertData(self,guildid):
sql=f'插入数据(公会)值({guildid})'
等待self.cursor.execute(sql)
每当我执行
wait DatabaseTest()。\u insertData(123456789)
时,当我清楚地重新定义self.cursor在\u connect中的位置时,它会给出一个错误,说明self.cursor是非类型的。我知道之所以叫_connect,是因为我在末尾放了一个打印语句,然后打印出来了。我该如何解决这个问题

回溯如下(我将其用于discord机器人):


直到
等待
时,才会切换上下文

asyncio.create_task()
just调度执行

使用
asyncio.sleep()

db=DatabaseTest()
等待异步IO.sleep(0)
数据库插入数据(123456789)
或重构:

类数据库测试:
定义初始化(自):
self.headers={
“主机”:操作系统环境[“主机”],
“用户名”:os.environ[“用户名”],
“密码”:操作系统环境[“密码”]
}
异步定义(自):
等待自我。_connect()
回归自我
异步定义aexit(自身、exc类型、exc val、exc tb):
#清理
等待self.cursor.close()
self.db.close()
...
将DatabaseTest()作为db进行异步: 等待数据库插入数据(123456789)
您能提供具体的错误回溯吗?您是否先调用
\u connect()
,并确保在
\u insertData
之前等待它?您是否检查了
\u connect
并验证了
db.cursor()
是否返回光标?我认为
\u connect
从未执行过。@CATboardBETA将回溯添加到question@GinoMempininit不应该调用_connect()方法吗?重构方法非常有效。非常感谢kyungmin!
Traceback (most recent call last):
  File "C:\Users\Name\PycharmProjects\compscibot\venv\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\Name\PycharmProjects\compscibot\cogs\startup\Help.py", line 57, in cmdchannel
    channelid = await DatabaseTest().getData(ctx.guild.id,'cmdchannel')
  File "C:\Users\Name\PycharmProjects\compscibot\cogs\dbtest.py", line 75, in getData
    await self.cursor.execute(sql)
AttributeError: 'NoneType' object has no attribute 'execute'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Name\PycharmProjects\compscibot\venv\lib\site-packages\discord\ext\commands\bot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Name\PycharmProjects\compscibot\venv\lib\site-packages\discord\ext\commands\core.py", line 859, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Name\PycharmProjects\compscibot\venv\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'execute'
None