Как отобразить ошибку пользователя в Python - PullRequest
2 голосов
/ 11 сентября 2010

Каков наилучший (стандартный) способ отображения ошибки пользователю в Python (например: неверный синтаксис, неверные аргументы, логические ошибки)?

Метод должен печатать ошибку в стандартной ошибкеи выйдите из программы.

Ответы [ 2 ]

4 голосов
/ 11 сентября 2010

В Python 2, например:

import sys
print>>sys.stderr, "Found", numerrs, "errors in the input."
sys.exit(1)

В Python 3 (или 2.6 или 2.7 с оператором from __future__ import print_function в верхней части вашего модуля), print становится функцией и синтаксисом«печать на стандартную ошибку» теперь

print("Found", numerrs, "errors in the input.", file=sys.stderr)

(несколько более дружественный синтаксис, чем странный >>, необходимый в Python 2; -).

(небольшое) преимуществоprint против (скажем) sys.stderr.write в том, что вы получаете «все современные удобства»: все части сообщения об ошибке автоматически превращаются в строки, они выводятся с разделителями пробелов, а для вас выводится конец строкив конце (если вы специально не потребуете иного).Чтобы использовать sys.stderr.write, вам нужно построить точную строку для вывода, как правило, с использованием конструкций форматирования строки - конечно, это не большая проблема, просто небольшая часть удобства.

logging обычнопредпочтительнее, но не в тех случаях, когда вы хотите, чтобы сообщение об ошибке переходило к стандартной ошибке, а только к стандартной ошибке: logging предлагает много-много других возможностей (отправлять сообщения различной степени серьезности, фильтровать некоторые, помещать некоторые в файлы и т. д.), но это неизбежно немного сложнее.

4 голосов
/ 11 сентября 2010

В небольших программах я использую что-то вроде этого:

import sys

def error(message):
    sys.stderr.write("error: %s\n" % message)
    sys.exit(1)

Для больших инструментов я использую пакет logging.

def error(message):
    logging.error('error: ', message)
    sys.exit(1)
...