Python 2.7 如何重写以下内容以避免出现“a”;“嵌套块”;错误?

Python 2.7 如何重写以下内容以避免出现“a”;“嵌套块”;错误?,python-2.7,csv,if-statement,block,with-statement,Python 2.7,Csv,If Statement,Block,With Statement,下面的代码生成 SystemError:静态嵌套块过多 我的问题是为什么会产生这个错误?我在网上搜索过,但是所有的例子都有20层深的循环嵌套。我根本没有那么多的文件I/O嵌套。我只是对一个变量进行了非常广泛的检查,并创建了两个层次的文件。我的目标是为这个特定数据集的每个不同类创建单独的“.csv”文件。还有没有更好的重写方法,这样我就可以避免系统错误?使用字典进行选项: import csv with open('complexdatset.csv','r'), open ('back.c

下面的代码生成

SystemError:静态嵌套块过多


我的问题是为什么会产生这个错误?我在网上搜索过,但是所有的例子都有20层深的循环嵌套。我根本没有那么多的文件I/O嵌套。我只是对一个变量进行了非常广泛的检查,并创建了两个层次的文件。我的目标是为这个特定数据集的每个不同类创建单独的“.csv”文件。还有没有更好的重写方法,这样我就可以避免系统错误?

使用字典进行选项:

import csv



with open('complexdatset.csv','r'), open ('back.csv','w'), open ('buffer_overflow.csv','w'), open ('ftp_write.csv','w'), open ('guess_passwd.csv','w'), open ('imap.csv','w'), open ('ipsweep.csv','w'), open ('land.csv','w'), open ('loadmodule.csv','w'), open ('multihop.csv','w'), open ('neptune.csv','w'), open ('nmap.csv','w'), open ('perl.csv','w'), open ('phf.csv','w'), open ('pod.csv','w'), open ('portsweep.csv','w'), open ('rootkit.csv','w'), open ('satan.csv','w'), open ('smurf.csv','w'), open ('spy.csv','w'), open ('teardrop.csv','w'), open ('warezclient.csv','w'), open ('warezmaster.csv','w') as fin, back, buffer_overflow, ftp_write, guess_passwd, imap, ipsweep, land, loadmodule, multihop, neptune, nmap, perl, phf, pod, portsweep, rootkit, satan, smurf, spy, teardrop, warezclient, warezmaster:
    writer0 = csv.writer(back, delimiter=',')
    writer1 = csv.writer(buffer_overflow, delimiter=',')
    writer2 = csv.writer(ftp_write, delimiter=',')
    writer3 = csv.writer(guess_passwd, delimiter=',')
    writer4 = csv.writer(imap, delimiter=',')
    writer5 = csv.writer(land, delimiter=',')
    writer6 = csv.writer(loadmodule, delimiter=',')
    writer7 = csv.writer(multihop, delimiter=',')
    writer8 = csv.writer(neptune, delimiter=',')
    writer9 = csv.writer(nmap, delimiter=',')
    writer10 = csv.writer(perl, delimiter=',')
    writer11 = csv.writer(phf, delimiter=',')
    writer12 = csv.writer(pod, delimiter=',')
    writer13 = csv.writer(portsweep, delimiter=',')
    writer14 = csv.writer(rootkit, delimiter=',')
    writer15 = csv.writer(satan, delimiter=',')
    writer16 = csv.writer(smurf, delimiter=',')
    writer17 = csv.writer(spy, delimiter=',')
    writer18 = csv.writer(teardrop, delimiter=',')
    writer19 = csv.writer(warezclient, delimiter=',')
    writer20 = csv.writer(warezmaster, delimiter=',')
    options = {
        'back': writer0.writerow,
        'buffer_overflow': writer1.writerow,
        'ftp_write' :  writer2.writerow,
        'guess_passwd' :  writer3.writerow,
        'imap' :writer4.writerow,
        'land':writer5.writerow,
        'loadmodule':writer6.writerow,
        'multihop':writer7.writerow,
        'neptune':writer8.writerow,
        'nmap':writer9.writerow,
        'perl':writer10.writerow,
        'phf':writer11.writerow,
        'pod':writer12.writerow,
        'portsweep':writer13.writerow,
        'rootkit':writer14.writerow,
        'satan':writer15.writerow,
        'smurf':writer16.writerow,
        'spy':writer17.writerow,
        'teardrop':writer18.writerow,
        'warezclient':writer19.writerow,
        'warezmaster':writer20.writerow,
    }
    for row in csv.reader(fin, delimiter=','):
        if row[41] in options.keys() :
            options[row[41]](row)

使用字典进行选项:

import csv



with open('complexdatset.csv','r'), open ('back.csv','w'), open ('buffer_overflow.csv','w'), open ('ftp_write.csv','w'), open ('guess_passwd.csv','w'), open ('imap.csv','w'), open ('ipsweep.csv','w'), open ('land.csv','w'), open ('loadmodule.csv','w'), open ('multihop.csv','w'), open ('neptune.csv','w'), open ('nmap.csv','w'), open ('perl.csv','w'), open ('phf.csv','w'), open ('pod.csv','w'), open ('portsweep.csv','w'), open ('rootkit.csv','w'), open ('satan.csv','w'), open ('smurf.csv','w'), open ('spy.csv','w'), open ('teardrop.csv','w'), open ('warezclient.csv','w'), open ('warezmaster.csv','w') as fin, back, buffer_overflow, ftp_write, guess_passwd, imap, ipsweep, land, loadmodule, multihop, neptune, nmap, perl, phf, pod, portsweep, rootkit, satan, smurf, spy, teardrop, warezclient, warezmaster:
    writer0 = csv.writer(back, delimiter=',')
    writer1 = csv.writer(buffer_overflow, delimiter=',')
    writer2 = csv.writer(ftp_write, delimiter=',')
    writer3 = csv.writer(guess_passwd, delimiter=',')
    writer4 = csv.writer(imap, delimiter=',')
    writer5 = csv.writer(land, delimiter=',')
    writer6 = csv.writer(loadmodule, delimiter=',')
    writer7 = csv.writer(multihop, delimiter=',')
    writer8 = csv.writer(neptune, delimiter=',')
    writer9 = csv.writer(nmap, delimiter=',')
    writer10 = csv.writer(perl, delimiter=',')
    writer11 = csv.writer(phf, delimiter=',')
    writer12 = csv.writer(pod, delimiter=',')
    writer13 = csv.writer(portsweep, delimiter=',')
    writer14 = csv.writer(rootkit, delimiter=',')
    writer15 = csv.writer(satan, delimiter=',')
    writer16 = csv.writer(smurf, delimiter=',')
    writer17 = csv.writer(spy, delimiter=',')
    writer18 = csv.writer(teardrop, delimiter=',')
    writer19 = csv.writer(warezclient, delimiter=',')
    writer20 = csv.writer(warezmaster, delimiter=',')
    options = {
        'back': writer0.writerow,
        'buffer_overflow': writer1.writerow,
        'ftp_write' :  writer2.writerow,
        'guess_passwd' :  writer3.writerow,
        'imap' :writer4.writerow,
        'land':writer5.writerow,
        'loadmodule':writer6.writerow,
        'multihop':writer7.writerow,
        'neptune':writer8.writerow,
        'nmap':writer9.writerow,
        'perl':writer10.writerow,
        'phf':writer11.writerow,
        'pod':writer12.writerow,
        'portsweep':writer13.writerow,
        'rootkit':writer14.writerow,
        'satan':writer15.writerow,
        'smurf':writer16.writerow,
        'spy':writer17.writerow,
        'teardrop':writer18.writerow,
        'warezclient':writer19.writerow,
        'warezmaster':writer20.writerow,
    }
    for row in csv.reader(fin, delimiter=','):
        if row[41] in options.keys() :
            options[row[41]](row)

您的
open
s本质上是嵌套的,您有23个。在Python2.7中,可以使用(
contextlib2
)来包含多个上下文,从而避免嵌套


有关一些好的示例,请参见。

您的
打开的
本质上是嵌套的,您有23个。在Python2.7中,可以使用(
contextlib2
)来包含多个上下文,从而避免嵌套


请参阅以获取一些好的示例。

对不起。这仍然会产生相同的错误。这是否意味着我需要为csv.writer和选项使用字典?对不起。这仍然会产生相同的错误。这是否意味着我需要为csv.writer和选项使用字典?