How to fix this AttributeError: 'NoneType' object has no attribute 'fileno' in Python3.8
How to fix this AttributeError: 'NoneType' object has no attribute 'fileno' in Python3.8
我正在使用 Pick 包在我的 IDLE 终端中创建一个基于 curses 的交互式选择列表。这是我目前拥有的代码:
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 information.
>>>
= 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, index = pick(options, 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独有的。
更深层次的错误是试图在发生错误的环境中运行咒骂。 IDLE doc中提到的sys.stdxxx是none的情况。您可以通过在控制台中使用 > python -m idlelib
启动 IDLE 来修复 this。 (这在文档中应该更清楚。)当我在 Windows 上这样做时,我得到了预期的文件号。
>>> import sys;
>>> sys.__stderr__.fileno()
2
- stdlib curses 记录为 Unix-only。如果
pick
运行 在 Windows 上,它必须包含足以满足其需求的内容。
来自命令提示符或 PowerShell 的 运行 应该就足够了,但我有两个额外的想法可以在将来帮助其他人。我在这里注意到这一点不要忘记。
添加一种新机制来检查错误 class 和消息。对于这种情况,ff AttributeError 和模板匹配并且对象是 Nonetype 并且属性是 std 流属性,添加一个 IDLE-specific 附录建议修复。
在系统终端 运行 的新 Run
=> Run ... customized
菜单对话框中添加一个选项(对于那些没有在系统终端中启动 IDLE 的用户)终端)。我第一次尝试失败,但这个问题增加了另一个用例。所以我应该再试一次。
我正在使用 Pick 包在我的 IDLE 终端中创建一个基于 curses 的交互式选择列表。这是我目前拥有的代码:
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 information.
>>>
= 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, index = pick(options, 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独有的。更深层次的错误是试图在发生错误的环境中运行咒骂。 IDLE doc中提到的sys.stdxxx是none的情况。您可以通过在控制台中使用
> python -m idlelib
启动 IDLE 来修复 this。 (这在文档中应该更清楚。)当我在 Windows 上这样做时,我得到了预期的文件号。
>>> import sys;
>>> sys.__stderr__.fileno()
2
- stdlib curses 记录为 Unix-only。如果
pick
运行 在 Windows 上,它必须包含足以满足其需求的内容。
来自命令提示符或 PowerShell 的
运行 应该就足够了,但我有两个额外的想法可以在将来帮助其他人。我在这里注意到这一点不要忘记。
添加一种新机制来检查错误 class 和消息。对于这种情况,ff AttributeError 和模板匹配并且对象是 Nonetype 并且属性是 std 流属性,添加一个 IDLE-specific 附录建议修复。
在系统终端 运行 的新
Run
=>Run ... customized
菜单对话框中添加一个选项(对于那些没有在系统终端中启动 IDLE 的用户)终端)。我第一次尝试失败,但这个问题增加了另一个用例。所以我应该再试一次。