笔记本验证失败 Jupyter

16

这不是Notebook Validation Failed的副本。

我有一个Jupyter笔记本,之前一直工作正常。无论我做什么,都会出现这些错误(我附上了一些示例),而且对于笔记本所做的任何操作都没有用(我尝试过重新启动内核、重新启动Jupyter)。而且,这只发生在这个笔记本中,其他笔记本即使在同一会话中同时运行也不会出现这种情况。我尝试搜索但找不到任何内容。我在Jupyter中看到的是: 进入图像描述

这样的错误有很多,它们相似但又不同:

The save operation succeeded, but the notebook does not appear to be valid. The validation error was:
Notebook validation failed: Non-unique cell id 'geological-poker' detected. Corrected to 'front-hampshire'.:
"<UNKNOWN>"

或其他人:

Notebook validation failed: Non-unique cell id 'medieval-nebraska' detected. Corrected to 'stock-eating'.:
"<UNKNOWN>"
Notebook validation failed: Non-unique cell id 'intense-award' detected. Corrected to 'blocked-garage'.:
"<UNKNOWN>"

而我在终端上得到的结果是:

Notebook JSON is invalid: Non-unique cell id 'medieval-nebraska' detected. Corrected to 'convinced-vacation'.
Notebook JSON is invalid: Non-unique cell id 'medieval-nebraska' detected. Corrected to 'described-commerce'.
Notebook JSON is invalid: Non-unique cell id 'meaning-victoria' detected. Corrected to 'occasional-numbers'.
Notebook JSON is invalid: Non-unique cell id 'eastern-buyer' detected. Corrected to 'english-benchmark'.

你知道发生了什么问题,以及如何修复它吗?


更新: 它不知怎么突然就好了一段时间,但后来又开始出现同样的问题,我仍然不知道是什么原因导致它好起来又变差了...其中一个解决方法是制作ntb的副本,然后丢弃旧的。


更新 2021年9月10日:

看起来对于python v3.8.11来说这已经不再是一个问题了。自从更新所有包之后,我就没有再遇到这个问题了,所以现在可能最简单的解决方法就是更新。我已经更新了:

jupyter core     : 4.7.1
jupyter-notebook : 6.4.3
ipython          : 7.26.0
ipykernel        : 6.2.0
4个回答

36

11
如果笔记本太大,粘贴操作需要太长时间,那么你可能有惊慌的理由。在应用上述解决方案之前,制作笔记本的副本总是一个好主意。 - aishik roy chaudhury
这通常足以重新创建您从不同笔记本复制的一个或几个单元格(如果您确切地记得哪些单元格)。 - Samantra
@Samantra 这不是真的。你可以复制并粘贴笔记本中的所有单元格。 - Elj

11

我遇到了相同的问题,经过阅读发现原因是将其他会话中创建的笔记本中的单元格复制/粘贴。我还没有找到解决方法,但至少您可以通过复制单元格内容而不是单元格本身来防止这种情况发生。


2
嗨@julrods,感谢您的回答。我已经忘记我问过这个问题了。我找到了另一个解决方案,就是复制ntb然后丢弃旧的,我会更新我的问题。我不完全确定它是否仅发生在您描述的情况中--当我在一段时间后在ntb上工作时,它发生在我身上,那时我没有复制单元格,它突然出现了。但是您是否有链接和来源可以提供? - My Work

10

简单回答

步骤1:使用剪刀选项,剪切Jupyter笔记本中的所有单元格,如图所示。 enter image description here

步骤2:现在保存笔记本,并使用粘贴选项将在上一步中剪切的单元格粘贴回去,如图所示。 enter image description here

步骤3:再次保存,你的问题现在应该已经解决了!赶紧开始愉快的编程吧。


嗨@DataFramed,感谢您的回答,但它看起来与被接受的答案相同,只是加了图形。我错过了什么区别吗? - My Work
@MyWork 感谢您指出来,您是正确的。我碰巧阅读了相同的 GitHub 线程并重现了错误,并拍摄了步骤的截图。希望能帮助其他人。 - DataFramed

3

重新保存笔记本以解决单元格名称问题的代码:

import nbformat as nbf
from glob import glob

import uuid
def get_cell_id(id_length=8):
    return uuid.uuid4().hex[:id_length]

# -- SETUP
nb_name = 'my_notebook'

# -- MAIN
# grab notebook
notebooks = list(filter(lambda x: nb_name in x, glob("./*.ipynb", recursive=True)))

# iterate over notebooks
for ipath in sorted(notebooks):
    # load notebook
    ntbk = nbf.read(ipath, nbf.NO_CONVERT)
    
    cell_ids = []
    for cell in ntbk.cells:
        cell_ids.append(cell['id'])

    # reset cell ids if there are duplicates
    if not len(cell_ids) == len(set(cell_ids)): 
        for cell in ntbk.cells:
            cell['id'] = get_cell_id()

        nbf.write(ntbk, ipath)

来源: https://github.com/jupyter/notebook/issues/6001#issuecomment-856303981

此问题可能与您的浏览器中的Cookie设置有关。您可以尝试在浏览器中启用第三方Cookie,或者将此站点添加到您的Cookie白名单中。如果您仍然无法登录,请尝试使用其他浏览器或清除缓存和Cookie。如果问题仍然存在,请向技术支持寻求帮助。

这个解决方案对我也起作用了。我创建了一个新文件夹。我把脚本放在文件夹中的一个笔记本中,并把有问题的笔记本放在同一个文件夹中。然后,我将“my_notebook”(分配给nb_name的变量)更改为我的笔记本的文件名和扩展名。运行脚本后,有问题的笔记本可以无问题保存。 - Elj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接