我正在使用API调用,因此使用Python字典.
但是,对于相同的请求,我并不总是键入相同的键,我想知道何时可以在没有异常的情况下调用键...
让我说我有
test = {'a':{'b':{'c':{'d':'e'}}}}
Run Code Online (Sandbox Code Playgroud)
有时密钥d会存在,有时则不会.有时c甚至不存在.
我想以某种方式test['a']['b']['c']['d']在一行中检查是否存在.
到目前为止我尝试过的:
用test.get('a', {}).get('b', {}).get('c', {}).get('d', {}).工作正常,但它是一个烂摊子,有时我有5-6个嵌套的词典,名字很长......
使用try/except块很好,但通常如果test['a']['b']['c']['d']不存在,我会尝试调用test['a']['b']['e']['f']检查是否存在,因此我需要为每个if语句添加一个try/catch,就好像我没有错,如果异常是catch,则不再执行try块.
我可能试图寻找一种反身的方式来做这件事,调用一个函数,将我的"对象"的名称作为字符串,检查每个键是否存在,如果存在,则返回对象本身.
有什么想法吗 ?
它背后的用法是,省略无用的情况,并假设有时信息在测试['a'] ['b'] ['c'] ['d'],有时在测试['a'] [' b'] ['f']:
if test['a']['b']['c']['d'] **exists**:
do sthg with the value of test['a']['b']['c']['d']
elif test['a']['b']['f'] **exists**:
do sthg else with the value of test['a']['b']['f']
else:
do sthg different
Run Code Online (Sandbox Code Playgroud)
如果我把try/except放在那里,第一个异常不会停止执行并且不让我执行elif吗?
而且,我真的很喜欢打电话的方式而test['a']['b']['c']['d']不是给出一个按键列表.事实上,我希望它对我和那些阅读/使用我的代码的人们尽可能透明.
谢谢 !