반응형
파이썬에서 asyncio 모듈로 비동기 처리 구현을 하는 과정에서
자주 발생할 수 있는 오류 종류인 SyntaxError: 'await' outside function에 대하여
발생 원인과 해결 방법을 간단하게 요약하여 정리해보도록 하겠습니다.
에러 발생 원인
일반적으로 py 파일을 실행하는 과정에서
다음과 같이 await 구문을 함수 밖 혹은 async 함수가 아닌 일반 함수 안에서
사용하려는 경우에 해당 구문 오류가 발생하게 됩니다.
(await 구문은 비동기 함수 내에서만 호출이 가능합니다.)
import asyncio
await asyncio.sleep(5) # 함수 밖에서 사용
# 또는
def main(): # async가 아닌 일반 함수 내에서 사용
await asyncio.sleep(5)
오류 해결 방법
따라서, await 구문을 async 함수 내의 범위에서만 작동되도록 코드를 고쳐주면
위의 오류는 간단하게 디버깅이 가능합니다.
만일, 가장 바깥 부분(main 함수에 해당)에서 async 함수를 호출하고 싶다면,
아래 예시처럼 asyncio.run 메서드를 사용하여 호출하도록 코드를 바꿔주시면 됩니다.
import asyncio
async def main():
await asyncio.sleep(5)
asyncio.run(main())