(Python 2.7)使用try不按预期工作的数据验证

时间:2015-09-28 09:22:35

标签: python validation

我已经要求用户使用raw_input以“AB12 XYZ”格式输入字符串。下面的代码应该验证字符串是否遵循这种格式,通过检查我可以在我希望能够使用的地方使用str和int - 我不知道这是一个优雅的解决方案,但我唯一可以目前想到的。如果输入不符合预期模式,则“非标准”应返回true。但是,目前,非标准总是如此返回。我怀疑这可能与我对str的使用有关,但我不确定究竟是什么。

这是来源:

try:
    for x in range(0,1):
        str(Tnumberplate[x])
    global nonstandard
    nonstandard = "true"
except TypeError:
    pass
try:
    for x in range(4,6):
        str(Tnumberplate[x])
    nonstandard = "true"
except TypeError:
    pass

1 个答案:

答案 0 :(得分:2)

我要指出的第一件事是数字可以转换为有效字符串,因此在数字上调用str()将会成功。

您可以使用的是isdigit()方法:

>>> numberplate = 'AB12 XYZ'
>>> for character in numberplate:
...     print(character.isdigit())
... 
False
False
True
True
False
False
False
False

如果将其存储在列表中,则可以简化测试:

expected = [False, False, True, True, False, False, False, False]
results = [character.isdigit() for character in numberplate]
if results == expected:
    # the digits are where we expect...
    pass