检查用户输入是否存在并由整数组成的更python方法

2024-09-28 01:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个GUI,我要求用户输入一些值。当用户提交数据时,我会进行一些验证:

  1. 首先我检查用户是否为每个输入输入了一个值
  2. 然后检查每个输入的值是否都是整数

尽量不重复我的想法,但验证的第二部分看起来更像是一个黑客。有没有一种更像Python式的重写方式,而不是像验证的第一部分那样把所有的东西都拼出来?在

    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))

Tags: 用户selfifchecknotstartintvalues
3条回答

如果在名为inputs的字典中有这些输入,则可以执行以下操作:

errors = []
for inputname, inputval in self.inputs.items():
    if not inputval:
        errors.append("Please provide a {}".format(inputname))
    try:
        setattr(self, inputname, int(inputval.GetValue()))
    except:
        errors.append("Value for {0} needs to be an integer.".format(inputname)) 
if errors:
    raise RuntimeError('\n'.join(errors))

由于您检查的是整数,而不是浮点,因此您可以简单地执行以下操作:

if self.start.GetValue().strip().isdigit():
    pass

对于输入为空字符串和输入包含非数字的两种情况,isdigit()返回{}。在

如果要发送错误分配的特定错误:

^{pr2}$

我认为try: ... except完全是Python。我会使用helper函数,而不是搜索错误消息get_int_of_name(name, value, error),如果需要,该消息将返回int和update错误:

def get_int_of_name(name, value, error):
    try:
        res = int(value)
    except ValueError:
        error.append("...")
        return 0
    else:
        return res

相关问题 更多 >

    热门问题