在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)) ]