[英]NameError: global name is not defined in genexpr in python
這個:
import os
class A(object):
os_sep = os.sep
_silentSkipsStart = {u'a dir%s' % os_sep}
def _refreshBasic(self,os_sep=os_sep, skips_start=tuple(
x.replace(os_sep, u'') for x in _silentSkipsStart)):
pass
失敗:
Traceback (most recent call last):
File "C:/Users/MrD/.PyCharm50/config/scratches/scratch", line 3, in <module>
class A(object):
File "C:/Users/MrD/.PyCharm50/config/scratches/scratch", line 9, in A
x.replace(os_sep, u'') for x in _silentSkipsStart)):
File "C:/Users/MrD/.PyCharm50/config/scratches/scratch", line 9, in <genexpr>
x.replace(os_sep, u'') for x in _silentSkipsStart)):
NameError: global name 'os_sep' is not defined
我猜想將os_sep = os.sep
引入全局范圍應該可以解決這一問題(從設計的角度來看,我應該可以解決)-但在這里我沒有得到python范圍規則:為什么在其他情況下os_sep
可以os_sep
解決而在genexpr
?
正如@PadraicCunningham的評論中鏈接的答案所解釋的那樣:
那是針對python 3的-對於python 2 列表的理解是可行的 -但comprehension變量將泄漏到類范圍內-因此這將泄漏x:
def _refreshBasic(self,os_sep=os_sep, skips_start=tuple(
[x.replace(os_sep, u'') for x in _silentSkipsStart])):
pass
所以我去了:
import os
os_sep = os.sep
class A(object):
_silentSkipsStart = {u'a dir%s' % os_sep}
def _refreshBasic(self,os_sep=os_sep, skips_start=tuple(
x.replace(os_sep, u'') for x in _silentSkipsStart)):
pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.