2015-09-28 42 views
1

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

这里的源:

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

你最好使用TRUE;和'假'而不是字符串。 – ForceBru

+1

另外为什么你认为'str()'会抛出'TypeError'?它不应该除非你手动编写了一个从'__str __()'函数抛出'TypeError'的类。 –

+0

@ForceBru这可能是真的,但我实际上并不知道 - 我可能知道,我的python知识非常有限。 – Jay

回答

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 
+0

非常感谢!这是我从未遇到过的有用的代码 - 应该直接解决我的问题。是的,使用str对我来说很愚蠢。我咯咯地笑了一下:D – Jay

相关问题