我尝试在在线提供的 Jupyter 中运行以下代码:
term_no = input('Enter number of approximations to use: ')
term_no = int(term_no)
print(term_no)
它返回一个错误
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'PyodideFuture'
当我在 VS code 中运行它时,没有错误。 Jupyter 是否存在错误,或者我应该添加一些额外的东西?
我在这里添加一个答案,即使Matthias的评论涵盖了它,因为它仍然是一个问题。
OP的情况涉及使用JupyterLite/Pyodide内核。目前存在一些限制(请参阅下面的“附加选项 2”下的更多信息),这些限制使得 JupyterLite/Pyodide 内核不同于使用传统完整 Python 内核在 Jupyter 中运行的东西,因此在某些情况下可能需要调整,例如当使用
input()
。
因此,对于 JupyterLite 和 Pyodide 内核,请尝试编辑代码以添加此
await
,如下所示:
term_no = await input('Enter number of approximations to use: ')
然后在下一个单元格中运行:
term_no = int(term_no)
print(term_no)
此解决方案基于此处。
Ipywidgets 在 JupyterLite/Pyodide 内核中工作,并提供了一种更完善的方式来从用户收集信息,重要的是,该代码可在典型的完整 Python 内核 (ipykernel) 和已安装 ipyiwdgets 的 pyodide 中使用。
import ipywidgets as widgets
from IPython.display import HTML
import random
slider = widgets.IntSlider(
value=0,
max= 10,
description= 'Adjust slider to the number of approximations to use:',
continuous_update=False,
style= {'description_width': 'initial'},
layout={'width': '500px'}
)
def on_value_change(change):
global term_no
term_no = slider.value
output.update(HTML(f"The number of approximations to use is set to: {term_no}"))
output = display(HTML("The number of approximations to use has not yet been set."), display_id=True)
display(slider)
slider.observe(on_value_change, names='value')
可以通过单击 here 在 JupyterLite 中进行尝试,当该会话出现时打开一个新笔记本,让右上角的忙碌指示器变为不忙,然后在单元格中运行
%pip install -q ipywidgets
,然后运行代码例子在这里。您现在必须使用该版本的 JupyterLite,因为 ipywidgets 目前尚未正确安装在稳定的 JupyterLite 中。这是暂时的,最终也将固定在主要的稳定分支这里。
请注意,使用这种收集信息的方法,不需要在下一个单元中运行任何内容,这与使用
await input()
的解决方案不同。 您可以在下一个单元中运行以下命令来验证情况确实如此:
print(type(term_no))
print(term_no)
事实上,如果您清除内核,然后使用滑块运行第一个代码,而不实际调整滑块,那么当您尝试使用
NameError
运行单元时,您会很方便地看到 term_no
。这比 input()
方式更方便,因为它在多个关键时刻提供反馈,同时避免挂起运行 Jupyter .ipynb
文件。
请注意,JupyterLite 仍标记为“实验性”。请参阅“状态”此处,其中警告“并非 JupyterLab 和经典笔记本中提供的所有常用功能都可以与 JupyterLite 配合使用”以及 在试用 Jupyter 页面上,请注意 突出显示的“实验”警告。
您可以在线将 MyBinder 用于典型的基于 Python 的内核,而无需登录或在计算机上安装任何内容。转到此处并单击“启动 Binder”或只需单击此处即可启动临时会话。您可以拖放到左侧的文件导航面板中,将正在进行的 Jupyter
.ipynb
文件从本地计算机上传到远程临时会话。请记住,这是远程虚拟计算机上的临时会话;没有持久性,因此您希望尽快将您制作的任何有用内容下载回本地系统。