哪种方法更好地跳过 'NoneType' 变量?
Which way is better to skip the 'NoneType' variable?
一个列表包含多个 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
哪个更好,为什么?
根据一般经验,如果可以的话,您不应该真正使用 try: except:
模式来控制流。引发在此上下文中不必要的异常会产生一些开销。希望这有帮助。
正如评论中提到的那样,try
方法不是好方法,因为您可能会因为该块中出现的任何其他异常而跳过某个元素。
所以第一个选项更好。这里有一个替代方案,你可以确定所有元素不是None
,但它会消耗更多内存:
for item in (element for element in list if element is not None):
fp.write(item + '\n')
P.S。不要使用内置名称作为变量名称,在您的情况下 - list
.
第二个不太好,因为它会在遇到 None
类型元素时抛出异常。异常将在 python 中以自己的方式处理。
在你的情况下,你给了一个通行证,所以这将完成。
更干净的方法是:
clean = [x for x in lis if x != None]
或者正如评论中所指出的,你也可以使用不是,即使它基本上编译成相同的字节码:
clean = [x for x in lis if x is not None]
希望这对您有所帮助。在罗马时就像罗马人一样:)
一个列表包含多个 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
哪个更好,为什么?
根据一般经验,如果可以的话,您不应该真正使用 try: except:
模式来控制流。引发在此上下文中不必要的异常会产生一些开销。希望这有帮助。
正如评论中提到的那样,try
方法不是好方法,因为您可能会因为该块中出现的任何其他异常而跳过某个元素。
所以第一个选项更好。这里有一个替代方案,你可以确定所有元素不是None
,但它会消耗更多内存:
for item in (element for element in list if element is not None):
fp.write(item + '\n')
P.S。不要使用内置名称作为变量名称,在您的情况下 - list
.
第二个不太好,因为它会在遇到 None
类型元素时抛出异常。异常将在 python 中以自己的方式处理。
在你的情况下,你给了一个通行证,所以这将完成。
更干净的方法是:
clean = [x for x in lis if x != None]
或者正如评论中所指出的,你也可以使用不是,即使它基本上编译成相同的字节码:
clean = [x for x in lis if x is not None]
希望这对您有所帮助。在罗马时就像罗马人一样:)