Python如何使用"try:",当它引发时不会停止

Sch*_*nge 0 python optimization

我有这个代码,想缩短它.这有可能吗?拥有通常相同的代码并没有多大意义:

try:
  years = values['year']
except KeyError:
  pass

try:
  tracks = values['track']
except KeyError:
  pass

try:
  statuses = values['status']
except KeyError:
  pass
        
Run Code Online (Sandbox Code Playgroud)

Bas*_*sic 10

如何完全避免异常?

.get() 如果密钥不存在,则允许您提供默认值...

years = values.get('year')  # Implicitly default to None
tracks = values.get('track', None)  # Explicitly default to None
statuses = values.get('status', 'Unknown')  # Or use any custom value
Run Code Online (Sandbox Code Playgroud)

正如@DSM的评论中所提到的,这与您的代码的不同之处在于它保证所有变量都将绑定一些值.否则,尝试使用任何变量可能会导致NameError运行时.

效率较低,但您也可以明确检查密钥是否存在...

if 'year' in values:
    # do something
Run Code Online (Sandbox Code Playgroud)

  • 这个代码与OP不同,并且更好,因为它保证所有三个名称都将被绑定.OP需要用`try/except NameError:`来包含他的代码的不同部分,这是不优雅的.(我自己,我只使用默认的None而不是0年和轨道,但那个至少是有争议的.) (3认同)