Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自私有导入(来自curses)的Python类型注释_Python_Types_Curses_Mypy - Fatal编程技术网

来自私有导入(来自curses)的Python类型注释

来自私有导入(来自curses)的Python类型注释,python,types,curses,mypy,Python,Types,Curses,Mypy,我刚开始使用类型注释,在Python中使用curses模块时遇到了一个问题。更具体地说,curses.wrapper(func)需要一个函数作为参数,func,将一个主窗口(也称为“stdscr”)作为参数。然而,我不确定如何注释这样一个函数。比如说 from curses import wrapper def interactive_shell_curses(stdscr: _curses.window) -> None: 即使打印(类型(stdscr))打印,也会产生错误“未定义名

我刚开始使用类型注释,在Python中使用
curses
模块时遇到了一个问题。更具体地说,
curses.wrapper(func)
需要一个函数作为参数,
func
,将一个主窗口(也称为“stdscr”)作为参数。然而,我不确定如何注释这样一个函数。比如说

from curses import wrapper

def interactive_shell_curses(stdscr: _curses.window) -> None:
即使
打印(类型(stdscr))
打印
,也会产生错误“未定义名称”\u curses”<代码>\u curses.window位于typeshed的文件
\u curses.pyi
中。然而,我不知道如何导入它,或者我是否应该导入它。此外,我不确定这里的最佳实践是否是避免注释
交互式shell\u诅咒


请就如何处理这个案件提出建议

Python
curses
模块只是
curses
库的包装器。特别是,这意味着您将无法访问用于键入目的的窗口对象(
\u curses.window
仅在调用
initscr()
之后才可用,即使可以,它也将毫无用处,因为库本身不提供类型提示)

另一方面,您不能只从
typeshed
\u curses.pyi
导入
\u CursesWindow
类型提示,因为它在运行时没有定义。这就是常数可以起作用的地方。如果
TYPE\u CHECKING
True
,则您处于类型检查模式,并从存根导入类型提示。否则,您将使用不关心类型提示的解释器运行代码,例如,使用
Any
类型。例如:

import curses
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from _curses import _CursesWindow
    Window = _CursesWindow
else:
    from typing import Any
    Window = Any


def main(stdscr: Window) -> None:
    height, width = stdscr.getmaxyx()
    text = 'Hello world'
    stdscr.addstr(int(height / 2), int((width - len(text)) / 2), text)

    key = 0
    while (key != ord('q')):
        stdscr.refresh()
        key = stdscr.getch()
    return None


if __name__ == '__main__':
    curses.wrapper(main)

尝试导入诅咒或尝试诅咒。window@azro:我已经尝试了这两种方法,但都无效<代码>诅咒。窗口不存在。我可以导入诅咒,但模块不包含任何窗口。(导入并搜索“窗口”后执行
帮助(\u诅咒)
不会产生任何结果。)