关于python:哪种方法更好地跳过”nonetype”变量?

Which way is better to skip the 'NoneType' variable?

列表包含多个NoneType元素。跳过NoneType

1
2
3
4
5
6
7
8
9
10
11
12
13
for item in list :
    if item is not None :
        fp.write(item + '
'
)

#OR

for item in list :
    try :
        fp.write(item + '
'
)
    except :
        pass

哪一个更好,为什么?


作为一般经验法则,如果您能帮助控制流,就不应该使用try: except:模式。在这个上下文中,引发一个不必要的异常涉及一些开销。希望这有帮助。


正如评论中提到的那样,try方法不是一个好方法,因为您可能会跳过某个元素,因为在该块中会出现任何其他异常。

所以第一个选择是更好的。这里有一个备选方案,您可以确保所有元素都不是None,但它将消耗更多的内存:

1
2
3
for item in (element for element in list if element is not None):
    fp.write(item + '
'
)

P.S.在您的情况下,不要使用内置名称作为变量名-list


第二个不会很好,因为每当遇到None类型的元素时,它都会抛出异常。异常将在Python中以自己的方式处理。

在你的情况下,你是给一个通行证,这样就可以做到。

最干净的方法是:

1
clean = [x for x in lis if x != None]

或者正如您也可以使用的注释中所指出的那样,即使它基本上编译为相同的字节码:

1
clean = [x for x in lis if x is not None]

希望这有帮助。当在罗马的时候,就像罗马人一样。)