我有一个Python字典,用于标记属性的键名.与此字典关联的程序设置为仅包含一些项目,并且仅在必要时才设置.因此,并非字典中的所有属性都在此脚本的每次传递中定义.
这是带字典的代码
def getWidths(self,sheetName):
sheets = {
'dclabels':self.dclabels,
'tdclabels':self.tdclabels
}
sheetName = sheetName.lower()
if sheetName in sheets:
return sheets.get(sheetName)
else:
return self.colWidths
Run Code Online (Sandbox Code Playgroud)
我收到错误说明AttributError: ClassName instance has no attribute 'dclabels'
如何避免此错误?有没有办法让脚本忽略任何未定义的属性?谢谢!
我找到了解决问题的方法.
def getWidths(self,sheetName):
if hasattr(self, sheetName.lower()):
name = getattr(self,sheetName.lower())
self.name = name
return self.name
else:
return self.colWidths
Run Code Online (Sandbox Code Playgroud)
我利用了hasattr()并getattr()解决了我的问题.感谢大家的建议.
是的,您可以查询对象,并迭代地构建dict:
for prop in ('dclabels', 'tdclabels'):
try:
sheets[prop] = getattr(self, prop)
except AttributeError: pass # expected
Run Code Online (Sandbox Code Playgroud)
(样式注释:PEP8样式永远不会将代码放在冒号后的行上;我发现将一个单一语句的套件放在与冒号相同的行上是可读的,只要所有代码和任何相关联评论很短.)
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |