比"尝试"和"除"更快的方式? - Python

Rad*_*Hex 3 python beautifulsoup

我经常编写如下代码

try:
  self.title = item.title().content.string
except AttributeError, e:
  self.title = None
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来解决这个问题?一个班轮?

Ale*_*lli 6

你有什么例外item.title()?裸露的except(可怕的做法!)并没有告诉我们.如果它是一个AttributeError(例如,item没有title方法),

self.title = getattr(item, 'title', lambda: None)()
Run Code Online (Sandbox Code Playgroud)

可能是你寻求的单线(但是表现不会有太大不同,请注意;-).

编辑:由于OP完全改变了问题(它最初只是使用self.title(),它现在正在使用self.title().content.string,并且特意捕获AttributeError而不是使用裸except),此答案的先前版本当然不再适用.现在正确的答案是:尝试单行是一种荒谬的方法,当属性引用链c继续增长越来越长时(下一次将有多少,9??因为他们在第一次编辑时从一跳到三跳... ;-).

并且不知道长时间表达的许多基本操作中的哪一个,Demeter -scoffing引用链可能会引起AttributeError,任何优化尝试都会相当盲目.