Python中If语句的语法

时间:2014-08-25 19:02:38

标签: python

此代码中的语法错误。我背后的逻辑是,如果文件类型字段中没有'noemail',电子邮件字段中有''(空白),而努力类型字段中有'dm',那么我想要某些o / p else我想要迭代,文件类型中没有'noemail'字段和电子邮件字段中的''(空白)以及努力类型字段中的'tm'。请帮我解释语法。

 import csv
 csv.register_dialect('piper', delimiter='|', quoting=csv.QUOTE_NONE)
 with open('temp3.txt','rb') as csvfile:
 for row in csv.DictReader(csvfile, dialect='piper'):
    print row['FILENAME'] ##gives output like Jun14WSJ_CNYR_EMAIL_CAP_DM1_20140818.txt           or Apr14WSJ_CNYR_NOEMAIL_CAP_TM_20140728.txt
    print row['EMAIL'] ##gives output like swansev@charter.net or blank
    print row['EFFORT_TYPE'] gives TM or DM
    abc = str(row['FILENAME'])
    xyz = str(row['EMAIL'])
    sdf = str(row['EFFORT_TYPE'])
    if 'NOEMAIL' in abc:
        if '' in xyz:
            if 'DM' in sdf:
                print(row['PREFIX']+row['PRINT_PUB_CD'])
            elif 'TM' in sdf:
                print('Its DM.')

I / P SEQ_NUM | ICS_ORIG_STRT_DT | EDW_FIRST_OUT_IFP_DT | CURR_DT | DEV_GE_NUM_DAYS | DEV_LE_NUM_DAYS |文件名| CAMPAIGN_NAME_DESC | CAMPAIGN_WAVE | MARKET_SEGMENT | CAMPAIGN_NAME | CAMPAIGN_WAVE_RUN | EFFORT_TYPE | EFFORT_NUM | UU_ID | PRINT_ACCT_NUM | PRINT_PUB_CD | PREFIX |后缀| FIRST_NAME | LAST_NAME | EMAIL | PHONE_NUM | BUS_PHONE | CO_NAME | STREET_NUM | ADDR | ADDR2 |城市|州(省)| ZIP_POSTAL | ZIP4 | TRACK_CD | VANITY_URL | BILL_FORM | LETTER_TEXT | OUTER 119 | 20140602 | 00010101 | 20140818 | 0 | 21 | Jun14WSJ_CNYR_EMAIL_CAP_DM1_20140818.txt | Jun14WSJ_CNYR_EMAIL_CAP_DM1 | WSJ_CNYR_EMAIL_CAP_DM1 | CNYR | WSJ_CNYR_EMAIL_CAP | Jun14 | DM | 1 | rnirenberg2 | 030409237002 |百灵||| RONALD |尼伦伯格| zt60@aol.com | 9733554718 | 9733554718 || 711 | NEWARK ### AVE || KENILWORTH | NJ | 07033 | 1744 | aaqitn56 | wsj.com/activate7 | JB217 | JFI18 | JO310

3 个答案:

答案 0 :(得分:1)

你的缩进在这里是错误的:

if 'DM' in sdf:
    print(row['PREFIX']+row['PRINT_PUB_CD'])
    elif 'TM' in sdf:
        print('Its DM.')

if阻止与elif阻止同级别,因此elif无效。对块进行去缩进以使其与应该应用的if块匹配:

if 'DM' in sdf:
    print(row['PREFIX']+row['PRINT_PUB_CD'])
elif 'TM' in sdf:
    print('Its DM.')

或者将其更改为if块。目前尚不清楚正确的解决方案是什么,但至少我们知道问题是什么。

答案 1 :(得分:0)

问题是elif在缩进中与任何if语句不匹配。在您的情况下,您必须将elif和以下print语句取消缩进一级,以获得预期结果。

答案 2 :(得分:0)

如果要嵌套语句,最后elif必须是if

 if 'TM' in sdf:
    print('Its DM.')

如果您不想筑巢,请致谢:

if 'DM' in sdf:
       print(row['PREFIX']+row['PRINT_PUB_CD'])
elif 'TM' in sdf:
      print('Its DM.')

elif's必须与if语句

处于同一级别
for row in csv.DictReader(csvfile, dialect='piper'):
    print row['FILENAME'] ##gives output like Jun14WSJ_CNYR_EMAIL_CAP_DM1_20140818.txt           or Apr14WSJ_CNYR_NOEMAIL_CAP_TM_20140728.txt
    print row['EMAIL'] ##gives output like swansev@charter.net or blank
    print row['EFFORT_TYPE'] #gives TM or DM
    abc = row['FILENAME']
    xyz = row['EMAIL']
    sdf = row['EFFORT_TYPE']
    if 'NOEMAIL' in abc and not xyz and 'DM' in sdf:
            print(row['PREFIX']+row['PRINT_PUB_CD'])
    elif 'NOEMAIL' in abc and 'TM'  in sdf and not xyz:
        print('Its DM.')

您似乎认为elif会考虑先前的陈述,但您需要使用两个块,每个块都包含所有条件。

如果您想要前两个条件且'DM' in sdf or 'TM' in sdf  你可以使用or

if 'NOEMAIL' in abc and not in xyz and 'DM' in sdf or 'TM'  in sdf:
相关问题