저주 (예를 들어, http://linux.die.net/man/3/move)를 이동 당신이 문서를 읽을 경우
012이 오류를 수정
첫 번째 코드는 파이썬에서 나오지 않으므로 두 번째 코드가 문제 일 수 있습니다. 그리고 빠른 테스트는 코드를 실행하는 것이 30 줄 또는 더 높은 터미널에서 제대로 작동하지만 일반적인 24 또는 25 행 터미널에서는 실패한다는 것을 보여줍니다.
당신이 디버그하기 쉽도록 첫 번째 (아마도 불가능 출력을 볼 수있게 엉망 그렇게 터미널이 남아 있지)을 try
/finally:
curses.endscr()
에서 전체를 포장하려면
. 그런 다음 x 및 y를 기록하는/
except:
의
stdscr.move
으로 전화를 걸면 실패한 위치를 알 수 있습니다. 또한 빠른 테스트를 위해 "30"을 명령 줄 인수로 사용합니다.
이제
#!/usr/bin/python
import sys
import curses
height = int(sys.argv[1]) if len(sys.argv) > 1 else 24
try:
stdscr = curses.initscr()
curses.noecho();
palette = [' ', ' ', '.', '.', '/', 'c', '(', '@', '#', '8']
index = 0
for x in xrange(50):
for y in xrange(height):
index = (index + 1) % len(palette)
try:
stdscr.move(y,x)
except Exception as e:
stdscr.refresh()
curses.endwin()
print
print x, y, e
sys.exit(1)
stdscr.addch(palette[index])
stdscr.refresh()
finally:
curses.endwin()
python cursetest 30
인쇄 : 여기에 모든 변경 버전의 내가 의심으로
0 25 wmove() returned ERR
그래서,이 X = 0에 실패하자, Y (25) =. 내가 80x50 내 터미널을 늘릴 경우
, 그것은 작동하지만 지금 python cursetest 60
실패 : 그 문제에 대한
0 50 wmove() returned ERR
, 내가 40x50 내 터미널을 축소 할 경우, python cursetest 30
는보다는 수평 가장자리에 실패 수직 :
40 0 wmove() returned ERR
당신이 오히려 창에 getmaxyx()
를 호출하려고 발생했을 때 오류를 잡으려고 노력보다는 사전에이를 확인하려면; y < 30이면 좋은 오류 메시지를 표시하고 종료 할 수 있습니다 (또는 다른 작업을 수행하거나 다른 작업을 수행 할 수 있음).
마지막으로, 빠른 확인은 C에서 작동하지 않음을 보여줍니다. 물론 던져진 예외는 없습니다. 원할 경우 반환되는 오류를 무시할 수 있지만, 결국 (24, 49) 위치에 300 번 연속 쓰기가됩니다. (당신이 정말로 원한다면 파이썬에서 똑같은 일을 할 수 있습니다 ...)
어떤 오류가 보이고, 무엇을 기대하며 무엇이'index'입니까? –
@hayden 오류 메시지가 표시되지 않고 이상한 이유로 업데이트되었습니다. 인덱스는 0에서 9까지 동적입니다. – Mustafa
내 생각에 24- (또는 25- 라인) 터미널에있어 stdscr.move (24, 0)에 도달하면 실패합니다 . try/catch를 넣고 화면을 재설정 한 다음 다시 올리기 전에 x 및 y를 기록하여 진행 상황을 볼 수 있습니다. – abarnert