У меня есть графический интерфейс, где я прошу пользователя ввести некоторые значения. Когда пользователь отправляет данные мне сделать некоторые проверки:Подробнее pythonic способ проверить, существует ли пользовательский ввод и состоит из целых чисел
- первым проверить, если пользователь ввел значение для каждого входа
- затем проверить, если каждый из введенных значений целых числа
Пытаясь не повторять себя, я придумал это, но вторая часть проверки больше похожа на хак. Есть ли более питонический способ переписать это, не говоря о том, что все, как в первой части проверки?
errors = []
# 1) check if values exist
if not self.startInput.GetValue():
errors.append("Please provide a start")
if not self.stopInput.GetValue():
errors.append("Please provide a stop")
if not self.valueInput.GetValue():
errors.append("Please provide a value")
# 2) check if values are integers
try:
self.start = int(self.startInput.GetValue())
self.stop = int(self.stopInput.GetValue())
self.value = int(self.valueInput.GetValue())
except ValueError as err:
tb = traceback.format_exc()
func = re.search('self\.(.*) =', tb).groups()[0]
errors.append("Value for {0} needs to be an integer.".format(func))
if errors:
raise RuntimeError('\n'.join(errors))
Это кажется хорошим вариантом, но тогда у меня нет способа давать разные сообщения об ошибках на основе отсутствия данных («Укажите начальное значение») по сравнению с данными, но не является целым числом (" Значение для начала должно быть целым числом "). Верный? – BioGeek
@BioGeek: Верно, если вы хотите эту функциональность, я бы пошел либо с двумя операциями 'if', либо с блоком' try ... except'. Любой из них является совершенно питоническим. –
@BioGeek См. Мое редактирование. –