teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

組み込み関数に被るので変数名を変更

2020/08/11 05:30

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -70,13 +70,13 @@
70
70
  flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT)
71
71
 
72
72
 
73
- def async_eval(src, vars=None):
73
+ def async_eval(src, variables=None):
74
- if not vars:
74
+ if not variables:
75
- vars = {}
75
+ variables = {}
76
76
  # XXX: コルーチンにするには、最低限一つの await を含む必要が有る為
77
77
  # コンパイル対象のコードの末尾に await asyncio.sleep(0) を追加してます。
78
78
  # ここは、他により良い解決策があるかもしれません。
79
- return eval(async_compile("\n".join([src, "await asyncio.sleep(0)"])), globals(), vars)
79
+ return eval(async_compile("\n".join([src, "await asyncio.sleep(0)"])), globals(), variables)
80
80
 
81
81
 
82
82
  async def main():

1

コード修正

2020/08/11 05:30

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -35,7 +35,7 @@
35
35
 
36
36
  async_compile = functools.partial(compile,
37
37
  mode="exec",
38
- file="",
38
+ filename="<discord>",
39
39
  flags=ast.PyCF_ALLOW_TOP_LEVEL_AWAIT)
40
40
 
41
41
 
@@ -76,7 +76,7 @@
76
76
  # XXX: コルーチンにするには、最低限一つの await を含む必要が有る為
77
77
  # コンパイル対象のコードの末尾に await asyncio.sleep(0) を追加してます。
78
78
  # ここは、他により良い解決策があるかもしれません。
79
- return eval(async_compile(src + "\n" + "await asyncio.sleep(0)"), globals(), vars)
79
+ return eval(async_compile("\n".join([src, "await asyncio.sleep(0)"])), globals(), vars)
80
80
 
81
81
 
82
82
  async def main():