This works in Jupyter notebooks but gives a SyntaxError: 'await' outside function
in a local python script. I've imported all of the same python modules in the Jupiter notebook.
async def download(url, filename):
response = await pyfetch(url)
if response.status == 200:
with open(filename, "wb") as f: # write binary mode
f.write(await response.bytes())
path='https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%204/data/Cust_Segmentation.csv'
# download(path, "Cust_Segmentation.csv") # Produces this error: RuntimeWarning: coroutine 'download' was never awaited
await download(path, "Cust_Segmentation.csv")
and got this error
await download(path, "Cust_Segmentation.csv")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: 'await' outside function
Any idea what's going on? Remember, this works in Jupyter notebooks and NOT in
Solutions Attempted
I tried removing the await
before calling the function and got this error: RuntimeWarning: coroutine 'download' was never awaited
.
The following links do not appear to be relevant.
This may have some relevance, but I've tried removing the await and it still throws a different error: RuntimeWarning: coroutine 'download' was never awaited
or UnboundLocalError: local variable '_jsfetch' referenced before assignment
Specific error with asyncio.run(download(URL, "Cust_Segmentation.csv"))
is the following:
tail example.py
filename ="Cust_Segmentation.csv"
async def download(url, filename):
response = await pyfetch(url)
if response.status == 200:
with open(filename, "wb") as f: # write binary mode
f.write(await response.bytes())
asyncio.run(download(URL, "Cust_Segmentation.csv"))
Produces:
python3 example.py
/data/XXX/miniconda/envs/devel/lib/python3.10/site-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.23.1
warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
Traceback (most recent call last):
File "/mnt/d/DEMO/MachineLearning/k-means_clustering/example.py", line 33, in <module>
asyncio.run(download(URL, "Cust_Segmentation.csv"))
File "/data/XXX/miniconda/envs/devel/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/data/XXX/miniconda/envs/devel/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
return future.result()
File "/mnt/d/DEMO/MachineLearning/k-means_clustering/example.py", line 28, in download
response = await pyfetch(url)
File "/data/XXX/miniconda/envs/devel/lib/python3.10/site-packages/pyodide/http.py", line 234, in pyfetch
url, await _jsfetch(url, to_js(kwargs, dict_converter=Object.fromEntries))
UnboundLocalError: local variable '_jsfetch' referenced before assignment