2017-05-13 22 views
11

मैं अजगर का उपयोग कर लिखने कलह बॉट कोशिश कर रहा हूँ के साथ, मैं पार चलो और एक साथ इस बोट फेंक दिया है।अजगर [अमान्य वाक्य रचना] async डीईएफ़

import discord 
import asyncio 
import random 

client = discord.Client() 
inEmail = input("Email:") 
inPassword = input("Passwd:") 

async def background_loop(): 
    await client.wait_until_ready() 
    while not client.is_closed: 
     channel = client.get_channel("************") 
     messages = ["Hello!", "How are you doing?", "Testing!!"] 
     await client.send_message(channel, random.choice(messages)) 
     await asyncio.sleep(120) 

client.loop.create_task(background_loop()) 
client.run(inEmail, inPassword) 

फिर भी जब मैं इसे चलाने के लिए करने की कोशिश की, मैं प्राप्त एक SyntaxError:

File "1.py", line 7 
    async def background_loop(): 
    ^
SyntaxError: invalid syntax 

क्यों है? मैं कभी नहीं मिला है कि इससे पहले कि जब मैं यह परीक्षण किया गया।

+0

'async' का उपयोग करने से पहले एक समारोह परिभाषा अजगर 3.4 या अधिक से अधिक में ही मान्य syntac है। –

+0

हाँ मैं स्क्रिप्ट "python3 1.py" – Andy

+0

मैं देख रहा हूँ का उपयोग कर चल रहे हैं, तो अजगर 3.4 से ऊपर कुछ भी काम करना चाहिए? यह वास्तव में अजीब बात है के बाद से अपने सर्वर अजगर संस्करणों बदल किसी भी तरह रात में: पी – Andy

उत्तर

11

async और await कीवर्ड को केवल अजगर 3.5 या नए लिए मान्य हैं।

  1. async बयान के बजाय coroutine डेकोरेटर का उपयोग करें::

async def func(): 
    ... 

# replace with 

@asyncio.coroutine 
def func(): 
    ... 
आप किसी भी अन्य अजगर संस्करण की तुलना में कम उपयोग कर रहे हैं, आप निम्न परिवर्तन करने की आवश्यकता होगी await
  1. उपयोग yield from के बजाय:

... 
await coroutine() 
... 

# replace with 

... 
yield from coroutine() 
... 

गया है कि आपकी समारोह में बदलने के लिए, पूर्व सिंटेक्स के उपयोग की जरूरत है की एक उदाहरण है:

@asyncio.coroutine 
def background_loop(): 
    yield from client.wait_until_ready() 
    while not client.is_closed: 
     channel = client.get_channel("************") 
     messages = ["Hello!", "How are you doing?", "Testing!!"] 
     yield from client.send_message(channel, random.choice(messages)) 
     yield from asyncio.sleep(120) 

पूर्व वाक्य रचना अभी भी अजगर के नए संस्करण में समर्थन किया जाएगा, लेकिन यह है अगर वहाँ पुराने संस्करणों के लिए समर्थन करने के लिए कोई आवश्यकता नहीं है await और async उपयोग करने के लिए सिफारिश की है। आप इस documentation से देख सकते हैं, यहाँ एक लघु स्निपेट है:

coroutine का async def प्रकार अजगर 3.5 में जोड़ा गया है, और सिफारिश की अगर वहाँ बड़े अजगर संस्करणों का समर्थन करने की कोई जरूरत नहीं है।

संबंधित मुद्दे