Python在listcomp期间给了我NameError,但是如果作为常规循环的一部分完成则不行

时间:2015-08-05 14:29:38

标签: python python-3.4

在python中我遇到运行某些代码的问题,但只有当它是列表理解的一部分时。

以下代码有效:

from os import listdir
from os.path import isfile, join

IMPORT_DIR = '/media/import_files/'
files = listdir(IMPORT_DIR)

FILES_FOR_IMPORT = []
for f in files:
    if isfile(join(IMPORT_DIR, f)):
        FILES_FOR_IMPORT.append(f)

但是,以下(假设等效的)列表理解会引发错误:

FILES_FOR_IMPORT = [ f for f in listdir(IMPORT_DIR) if isfile(join(IMPORT_DIR,f)) ]

堆栈追踪:

  File "/home/mitch/workspace/mysite/flat_file_importer/ImporterMain.py", line 12, in <module>
    class ImporterMain():
  File "/home/mitch/workspace/mysite/flat_file_importer/ImporterMain.py", line 25, in ImporterMain
    FILES_FOR_IMPORT = [ f for f in listdir(IMPORT_DIR) if isfile(join(IMPORT_DIR,f)) ]
  File "/home/mitch/workspace/mysite/flat_file_importer/ImporterMain.py", line 25, in <listcomp>
    FILES_FOR_IMPORT = [ f for f in listdir(IMPORT_DIR) if isfile(join(IMPORT_DIR,f)) ]
NameError: name 'IMPORT_DIR' is not defined

在测试中,我在第二位之前的第一位;两人都被执行了。第一部作品,第二部作品没有。同样的行为,如果我一次只执行一个 - 一个工作,一个不工作。

显然IMPORT_DIR变量已经定义 - 它正在代码的第一位使用,所以我不确定为什么Python会向我吐出这个错误。

我之前使用的列表组件从这里被盗:https://stackoverflow.com/a/3207973/3665278

完整代码(首先使用位,第二位使用列表):

from os import listdir
from os.path import isfile, join
import re


class ImporterMain():
    IMPORT_DIR = '/media/import_files/'

    files = listdir(IMPORT_DIR)

    FILES_FOR_IMPORT = []
    for f in files:
        if isfile(join(IMPORT_DIR, f)):
            FILES_FOR_IMPORT.append(f)

    FILES_FOR_IMPORT = [ f for f in listdir(IMPORT_DIR) if isfile(join(IMPORT_DIR,f)) ]

0 个答案:

没有答案