Skip to main content
 首页 » 编程设计

python之名称错误 : name 'x' is not defined (x declared in for loop)

2025年05月04日13lhb25

对于下面提到的代码,我遇到以下错误:

NameError: name 'x' is not defined 
 
list_keywords=['DROP','CREATE','ALTER','COMMENT'] 
file=open(filename) 
for line in file: 
    if any(x in line.upper() for x in list_keywords): 
        print (x) 

我能够打印包含列表中提到的任何字符串的行。

下面的代码有效。

list_keywords=['DROP','CREATE','ALTER','COMMENT'] 
file=open(filename) 
for line in file: 
    if any(x in line.upper() for x in list_keywords): 
        print (line) 

有人可以告诉我为什么 print(x) 不起作用吗?

请您参考如下方法:

在 Python 2 中,x 在列表推导中被泄露到命名空间中(尽管不在生成器表达式中),但在 Python 3 中则不然:

派2:

>>> [x for x in range(3)] 
[0, 1, 2] 
>>> x 
2 

第 3 层:

>>> [x for x in range(3)] 
[0, 1, 2] 
>>> x 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
NameError: name 'x' is not defined 

无论如何,如果您想获得满足条件的第一个值,则使用 next() 代替,并且对于所有值使用列表理解,例如

>>> next(x for x in range(5) if x % 2 == 1) 
1 
>>> [x for x in range(5) if x % 2 == 1] 
[1, 3]