Python:需要停止运行代码,如果满足/不满足条件

时间:2021-05-14 13:23:30

标签: python regex

我编写了一个 python 代码来根据特定的 MOD11 算法检查字符串的有效性,但想进一步检查正则表达式是否字符串在开始时的结构正确。

TIN = '5562000'

import re
x = re.search("\d{7}(\d|K){1}", TIN)
if x != 'None':
    print ('Structure Valid')
    
    check = (int(TIN[0])*8) + (int(TIN[1])*7) + (int(TIN[2])*6) + (int(TIN[3])*5) + (int(TIN[4])*4) + (int(TIN[5])*3) + (int(TIN[6])*2)

    y = check / 11

    z = "{:.0f}".format(y)

    print(z, TIN[7])

    print((TIN[7]) is str(z))

    if ((TIN[7]) == str(z)) & (str(z) != '0'):
        print('Valid TIN')
    elif ((TIN[7]) == 'K') & (str(z) == '10'):
        print('Valid TIN')
    elif (TIN[7] == '0') & (str(z) == '11'):
        print('Valid TIN')
    else:
        print('Invalid TIN!')   

else:
    print('Invalid Structure')

当结构有效,即字符数正确时,一切正常。但是,如果 TIN 变量中缺少一个字符,则会出现此错误:

    print(z, TIN[7])
IndexError: string index out of range

所以,如果 TIN 的结构不正确,我需要一种不运行这部分代码的方法:


y = check / 11

z = "{:.0f}".format(y)

print(z, TIN[7])

print((TIN[7]) is str(z))

if ((TIN[7]) == str(z)) & (str(z) != '0'):
    print('Valid TIN')
elif ((TIN[7]) == 'K') & (str(z) == '10'):
    print('Valid TIN')
elif (TIN[7] == '0') & (str(z) == '11'):
    print('Valid TIN')
else:
    print('Invalid TIN!')

我尝试了带有 break 函数和 sys.exit 的 while 和 for 循环,也尝试了缩进,但我还没有那么好让它工作。关于如何完成这项工作的任何想法?

2 个答案:

答案 0 :(得分:2)

关键错误是你对正则表达式结果的比较:

if x != 'None':

x 与字符串 "None" 进行比较,该字符串与 None 关键字不同:

>>> None == "None"
False

你希望你的支票是:

if x is not None:

那么,一切都应该正常了。

编辑:请记住,re.search 允许在正则表达式匹配前后添加其他字符。我想你可能不想要这里,所以你可能想改用 re.fullmatch

答案 1 :(得分:0)

你可以使用

try:
    print(z, TIN[7])
except Exception as e:
    print(e)
    #further code

它将尝试执行 try 内的块。 如果它执行没有错误,那么它将继续继续而不考虑 except 部分。 如果该块有任何问题,它将执行 except 中的块并将错误存储在 e 中。