列表包含多个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
哪一个更好,为什么?
答案 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]
希望这会有所帮助。在罗马的时候喜欢罗马人:)