我有一个简单的 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
有什么方法可以获得更具描述性的消息吗?
当无法创建子窗口(非法操作)时,可能会发生该错误。发生这种情况是因为您要求在窗口外部绘制子窗口。
方法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()
我同意这个解决方案——但是,主要问题是;在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