问题描述
我正在使用Pick包在我的IDLE终端中创建基于诅咒的交互式选择列表。这是我目前拥有的代码:
from pick import pick
title = 'Please choose your favorite programming language: '
options = ['Java','JavaScript','Python','PHP','C++','Erlang','Haskell']
option,index = pick(options,title)
print(option)
print(index)
但是,我遇到以下错误:
Python 3.8.5 (tags/v3.8.5:580fbb0,Jul 20 2020,15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help","copyright","credits" or "license()" for more @R_842_4045@ion.
>>>
= RESTART: C:\Users\haneg\OneDrive\Documents\Python-Scripts\Restrictieenzymen.py
---
Traceback (most recent call last):
File "C:\Users\haneg\OneDrive\Documents\Python-Scripts\Restrictieenzymen.py",line 5,in <module>
option,title)
File "C:\Users\haneg\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\pick\__init__.py",line 195,in pick
return picker.start()
File "C:\Users\haneg\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\pick\__init__.py",line 181,in start
return curses.wrapper(self._start)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1520.0_x64__qbz5n2kfra8p0\lib\curses\__init__.py",line 84,in wrapper
stdscr = initscr()
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1520.0_x64__qbz5n2kfra8p0\lib\curses\__init__.py",line 30,in initscr
fd=_sys.__stdout__.fileno())
AttributeError: 'nonetype' object has no attribute 'fileno'
如果我直接在Python中运行此代码而没有IDLE,则不会出现此错误。有人对如何解决此问题有任何建议吗?任何帮助表示赞赏!
解决方法
涉及IDLE,但仅作为GUI应用程序使用,通常不从命令行启动。
-
当前的错误是尝试访问.fileno而没有捕获AttributeError并正常退出。您可以向
pick
个人提及。这种情况并非IDLE独有。 -
更深层的错误正在尝试在发生错误的环境中运行curses。 IDLE doc中未提及sys。 stdxxx 的情况。您可以通过在控制台中使用
> python -m idlelib
启动IDLE来修复 this 。 (这应该在文档中更加清楚。)在Windows上执行此操作时,我得到了预期的文件编号。
>>> import sys;
>>> sys.__stderr__.fileno()
2
- stdlib curses被记录为仅限Unix。如果
pick
在Windows上运行,则必须包含足以满足其需求的内容。
从命令提示符或PowerShell运行足以满足您的需求,但我还有另外两个想法可以在将来帮助其他人。我在这里要注意不要忘记。
-
添加新的机制来检查错误类和消息。对于这种情况,ff AttributeError和模板匹配,并且object为Nonetype且attribute为std stream属性,请添加IDLE特定的附录,以建议修复。
-
向新的
Run
=>Run ... customized
菜单对话框中添加一个选项,以在系统终端中运行(对于那些未在终端中启动IDLE的用户)。我第一次尝试失败,但是这个问题增加了另一个用例。所以我应该再试一次。