创建子窗口时模糊的诅咒错误消息

问题描述 投票:0回答:2

我有一个简单的 pythoncurses 代码,可以创建一个子窗口。但是,在运行函数 window.subwin() 的过程中失败并显示消息:

这里是一个测试用例:

import curses

if __name__ == '__main__':
    curses.initscr()

    window = curses.newwin(15, 40, 7, 20)
    window.box()
    window.refresh()

    subwindow = window.subwin(5, 10, 2, 2)
    subwindow.box()
    subwindow.refresh()

    subwindow.getkey()

    curses.endwin()

产生以下输出:

Traceback (most recent call last):
File "c.py", line 12, in <module>
  subwindow = window.subwin(5, 10, 2, 2)
_curses.error: curses function returned NULL

有什么方法可以获得更具描述性的消息吗?

python ncurses curses
2个回答
11
投票

当无法创建子窗口(非法操作)时,可能会发生该错误。发生这种情况是因为您要求在窗口外部绘制子窗口。

方法subwin接收绝对坐标(相对于屏幕,而不是父窗口)。如果 subwin 坐标位于 window 之外,则会失败。失败的另一个原因:宽度或高度溢出窗口。

您可以使用 derwin(派生窗口)代替 subwin,它接收相对坐标(不太容易出错)。

import curses

if __name__ == '__main__':
    curses.initscr()

    window = curses.newwin(15, 40, 7, 20)
    window.box()
    window.refresh()

    subwindow = window.derwin(5, 10, 2, 2)  # <- here is the change
    subwindow.box()
    subwindow.refresh()

    subwindow.getkey()

    curses.endwin()

0
投票

我同意这个解决方案——但是,主要问题是;在Python中使用curses时 - 识别错误可能非常困难 - 即使使用try -catch块,终端窗口通常只是短暂闪烁,不留下任何出错的痕迹......

我通常使用 putty 作为终端窗口,并将从终端到文件的所有内容记录下来 - 以便能够识别错误,但这很乏味,我希望有一个更易于使用的解决方案。

例如 - 花了相当长的时间来识别这个错误,我尝试使用 stdscr.addstr(0,0, 今天...

添加一个变量

在我初始化“今天”之前 - 终端窗口只是闪烁,没有提示出了什么问题......

在腻子日志中它变得更加清晰: $ python ds2.py [?1049h[22;0;0t[1;52r(B[m[4l[?7h[?1h=得到错误]] [名称“今天”未定义] [39;49m[?1l>[39;49m[52;1H[K[52;1H[?1049l[23;0;0t] [?1l>]0;s38846@lsp8003c:~/python

是的,所有丑陋的格式都被翻译成文本文件,但错误消息的要点是:

出现错误 [名称“今天”未定义]

因此,任何改进这种原始调试的建议都会非常有帮助:)

干杯, /J

© www.soinside.com 2019 - 2024. All rights reserved.