2015-08-27 14 views
6

kann nicht herausfinden, wie erwartet 3,5-RC2 von PythonWie benutze ich den Ausdruck?

>>> 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

Ich überprüfte [PEP 0492] (https://www.python.org/dev/peps/pep-0492/#examples-of-await-expressions) und das scheint wie es sollte gültig sein. Könnten sie es geändert haben oder so? – TigerhawkT3

+0

Vielleicht muss es Teil von [einem größeren Konstrukt] sein (https://docs.python.org/3.6/whatsnew/3.5.html#pep-492-coroutines-mit-async-and-await-syntax)? – TigerhawkT3

+0

Haben Sie das gelesen? https://docs.python.org/3.6/reference/compound_stmts.html#async-def – JeromeJ

Antwort

8

Per documentation, await kann verwendet werden, in einer Koroutine Funktion nur zu verwenden. So ist die korrekte Syntax für sie verwenden, sollte

seine
async def foo(): 
    pass 

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

Wenn ich die Coroutine verwenden muss, muss ich eine Funktion erstellen und dann darauf warten, um den Wert zu erhalten? – balki

+0

Es muss nicht unbedingt eine Funktion sein, solange es ein erwartetes Objekt (d. H. Native und generatorbasierte Coroutine oder ein Objekt mit der magischen Methode "__await__") @ balki ist – Railslide

2

Genau wie in C#, await kann nur in einer async Methode (Funktion) verwendet werden.