哪种方式最好跳过'NoneType'变量?

时间:2015-07-23 12:14:50

标签: python nonetype

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

for item in list :
    if item is not None :
        fp.write(item + '\n')

#OR

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

哪一个更好,为什么?

3 个答案:

答案 0 :(得分:7)

作为一般经验法则,如果可以提供帮助,则不应该将try: except:模式用于控制流程。在此上下文中引发异常时需要一些开销。希望这会有所帮助。

答案 1 :(得分:4)

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

所以第一个选择更好。这是一个替代方案,您可以确保所有元素都不是None,但会占用更多内存:

for item in (element for element in list if element is not None):
    fp.write(item + '\n')

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

答案 2 :(得分:1)

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

在你的情况下,你正在通过,所以这将完成。

更清洁的方式是:

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

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

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

希望这会有所帮助。在罗马的时候喜欢罗马人:)