2015-11-01 7 views
0

Я пишу скрипт сценария python 2.7 с использованием matplotlib, и я хочу, чтобы он отображал то, что он только что построил, если только я не запускаю его из сеанса, отличного от X на сервере института, для пакетного построения. Для таких случаев я просто говорю, чтобы он ничего не показывал.Не удалось поймать RuntimeError в python

Однако я не хочу, чтобы просто остановить, если я забываю сделать это, поэтому я пытаюсь поймать исключение RuntimeError так:

try: 
    pyplot.show() 
except RuntimeError: 
    print 'Could not display figure. No X-session?' 
except: 
    print 'Unexpected error:' 
    raise 

Doing это, однако, я все еще получаю что я хотел бы получить, не пытаясь поймать что-нибудь, а именно TraceBack и:

RuntimeError: Invalid DISPLAY variable 

он не печатает «Непредвиденная ошибка», поэтому он не работает в секунду, за исключением.

Что мне не хватает? Это может быть что-то очень простое, потому что я довольно новичок в этом.

EDIT:

Исключение, кажется, быть выброшен, прежде чем я пытаюсь показать сюжет, так что, возможно, это совершенно иная проблема.

+1

Не пытайтесь поймать ошибку, вместо этого проверьте отображаемую переменную самостоятельно: 'if not" DISPLAY "в os.environ' [...] – cel

+0

Это звучит лучше, попробуй! – user35915

ответ

0

Проблема была в другом месте. Я просто hava для использования другого бэкэнда для matplotlib, если я запускаю сеанс без X. Проверка DISPLAY-переменной, как CEL предложил и вызов

matplotlib.use('Agg') 

на не-X сессий перед импортом pyplot решает эту проблему.

Смежные вопросы