【问题标题】:Google colab file download failed to fetch errorGoogle colab 文件下载失败获取错误
【发布时间】:2019-05-03 23:53:45
【问题描述】:

我使用 google colab 制作字典,将其转储为 json 文件,然后通过以下代码将文件下载到我的笔记本电脑中:

from google.colab import files
import json

dict = {'apple': 'fruit', 'mango': 'fruit', 'carrot': 'vegetable', 'brocoli': 'vegetable', 'cat': 'animal'}

with open('sampleDictionary.json', 'w') as f:
  json.dump(dict, f)

files.download('sampleDictionary.json')
f.close()

当我尝试运行这段代码时,它给出了这个错误:

MessageError                              Traceback (most recent call last)
<ipython-input-29-1251d71a0a36> in <module>()
      7   json.dump(dict, f)
      8 
----> 9 files.download('sampleDictionary.json')
     10 f.close()

/usr/local/lib/python3.6/dist-packages/google/colab/files.py in download(filename)
    176       'port': port,
    177       'path': _os.path.abspath(filename),
--> 178       'name': _os.path.basename(filename),
    179   })

/usr/local/lib/python3.6/dist-packages/google/colab/output/_js.py in eval_js(script, ignore_result)
     37   if ignore_result:
     38     return
---> 39   return _message.read_reply_from_input(request_id)
     40 
     41 

/usr/local/lib/python3.6/dist-packages/google/colab/_message.py in read_reply_from_input(message_id, timeout_sec)
    104         reply.get('colab_msg_id') == message_id):
    105       if 'error' in reply:
--> 106         raise MessageError(reply['error'])
    107       return reply.get('data', None)
    108 

MessageError: TypeError: Failed to fetch

Click here to see the screenshot of my code and the error

请帮帮我

【问题讨论】:

    标签: python python-3.x jupyter-notebook google-colaboratory


    【解决方案1】:

    你需要启用third-party cookies 但目前它只适用于Chrome浏览器,打开

    chrome://settings/content/cookies
    

    确保Block third-party cookies 的选项已禁用,然后单击Allow 部分中的add 按钮,然后添加

    colab.research.google.com
    

    【讨论】:

    • 谢谢...因为这个原因,我使用了文件 ui
    • 我完全按照你说的做了,但仍然遇到同样的错误。我错过了什么吗?
    • 这可能是因为使用了 Adblock 吗?我允许使用 cookie,但它仍然不起作用
    【解决方案2】:

    我在使用 colab 时遇到了同样的问题(MessageError: TypeError: Failed to fetch)。

    然后,我在 colab 笔记本中将文件操作拆分为不同的代码单元; 我将文件打开、写入、关闭放在一个代码单元中, 并在后续代码单元中使用 files.download()。

    问题解决了!

    【讨论】:

      【解决方案3】:

      问题在于,当 google 尝试“获取”文件时,文件还没有完成写入。
      简单的解决方案:

      with open('sampleDictionary.json', 'w') as f:
        json.dump(dict, f)
      time.sleep(10)
      files.download('sampleDictionary.json')
      

      更复杂的解决方案可以是为 files.download 放置一个带有 try catch 语句的 for 循环,然后在 catch 中放置一个睡眠。保持最大循环时间,以防文件永远不会完成。

      【讨论】:

      • time.sleep(10)只是一个例子,我需要使用10秒以上,具体取决于下载文件的大小?
      • @AleB 是。您也可能需要几秒钟后在单独的代码块中运行 files.download 块。
      【解决方案4】:

      它对我也不起作用。一种方法是不使用

      files.download(文件名)

      然后只需转到“文件”部分,就会有您的文件。右键下载。

      google colab 编辑器左侧有一个>,点击它会出现目录、代码片段和文件部分。

      【讨论】:

        【解决方案5】:

        在尝试了 chrome cookie 之后,除了循环之外,没有任何效果,所以我改变了获取文件的方式。 我用的是google驱动文件流,非常简单高效:

        from google.colab import drive
        drive.mount('/content/drive')
        

        它会要求你提供授权码,你可以访问相应的url找到它。

        with open('/content/drive/My Drive/foo.txt', 'w') as f:
          f.write('Hello Google Drive!')
          #other instructions
        
        drive.flush_and_unmount()
        

        【讨论】:

          【解决方案6】:

          我在使用 colab 时遇到了同样的问题(MessageError: TypeError: Failed to fetch)。

          然后,我在 colab 笔记本中将文件操作拆分为不同的代码单元; 我将文件打开、写入、关闭放在一个代码单元中, 并在后续代码单元中使用 files.download()。

          【讨论】:

            【解决方案7】:

            ewwink's cookie solution 有效。

            但是,即使您设置了 cookie,如果 colab 笔记本自动断开连接,这可能是另一个问题,因为您将其放置很长时间。 (比如你运行了一系列代码块,files.download运行需要很长时间)

            如果是这种情况,则安装 Google Drive(请参阅 medchik 答案)可能是一个可行的替代方案。

            【讨论】: