2015-08-27 21 views
6

Không thể tìm ra cách để sử dụng chờ đợi từ python 3.5 RC2Làm thế nào để sử dụng biểu thức đang chờ?

>>> async def foo(): 
...  pass 
... 
>>> await foo() 
    File "<ipython-input-10-a18cb57f9337>", line 1 
    await foo() 
      ^
SyntaxError: invalid syntax 

>>> c = foo() 
>>> await c 
    File "<ipython-input-12-cfb6bb0723be>", line 1 
    await c 
     ^
SyntaxError: invalid syntax 

>>> import sys 
>>> sys.version 
'3.5.0rc2 (default, Aug 26 2015, 21:54:21) \n[GCC 5.2.0]' 
>>> del c 
RuntimeWarning: coroutine 'foo' was never awaited 
>>> 
+0

Tôi đã kiểm tra [PEP 0492] (https://www.python.org/dev/peps/pep-0492/#examples-of-await-expressions) và dường như nó phải hợp lệ. Họ có thể thay đổi nó hay gì đó không? – TigerhawkT3

+0

Có thể nó phải là một phần của [một số cấu trúc lớn hơn] (https://docs.python.org/3.6/whatsnew/3.5.html#pep-492-coroutines-with-async-and-await-syntax)? – TigerhawkT3

+0

Bạn đã đọc cái này chưa? https://docs.python.org/3.6/reference/compound_stmts.html#async-def – JeromeJ

Trả lời

8

Theo documentation, await chỉ có thể được sử dụng bên trong một hàm coroutine. Vì vậy, các cú pháp chính xác để sử dụng nó nên

async def foo(): 
    pass 

async def bar(): 
    await foo() 
+0

Nếu tôi phải sử dụng coroutine, tôi phải tạo ra một hàm và sau đó chờ đợi nó để có được giá trị? – balki

+0

Nó không nhất thiết phải là một hàm, miễn là nó là một đối tượng awaitable (tức là coroutine gốc và máy phát điện hoặc một đối tượng với phương pháp ma thuật '__await__') @balki – Railslide

2

Cũng giống như trong C#, await chỉ có thể được sử dụng trong một phương pháp async (chức năng).

Các vấn đề liên quan