3
在一些快速上下文中,我使用Vim文本編輯器,並使用它作爲一個名爲UltiSnips的插件。我有時在我的代碼中有這樣一行,我有一個字典,它在一行中使用多個鍵。將一行Python代碼劃分爲幾部分
someDict["something"]["anotherThing"]
如果這一行得到一個KeyError,我選擇該行並使用UltiSnips插件將其轉換爲它的部分。
print(someDict)
print(someDict["something"])
print(someDict["something"]["anotherThing"])
它非常適合於簡單的目的,但我想這是一個有點聰明,因爲在目前,我無法處理任何事情更加複雜,這樣
someDict["something"][some_module.someOtherDict["somethingElse"]]
(預期輸出)
print(someDict)
print(someDict["something"])
print(some_module)
print(some_module.someOtherDict)
print(some_module.someOtherDict["somethingElse"])
print(someDict["something"][some_module.someOtherDict["somethingElse"]])
我想從我的當前系統,這僅僅是正則表達式,其捕獲[] S,以處理使用Python的AST模塊線路切換,但它被證明是更復雜的比我壽因爲ast從我預期的方式向後評估。我在寫信詢問是否已經有這樣的事情存在,或者是解決這個問題的更好方法。
設置來測試與解決方案(頂線輸入,打印線是預期的輸出)的樣本:
something
print(something)
something.anotherThing
print(something)
print(something.anotherThing)
something.anotherThing()
print(something)
print(something.anotherThing)
print(something.anotherThing())
something.anotherThing()['aDictKey'].moreMethods(valueInfo, 8, 'methodString', someKeyword=value, *args, **kwargs)
print(something)
print(something.anotherThing)
print(something.anotherThing())
print('aDictKey')
print(something.anotherThing()['aDictKey'])
print(something.anotherThing()['aDictKey'].moreMethods)
print(valueInfo)
print(8)
print('methodStrings')
print(value)
print(*args)
print(**kwargs)
print(valueInfo, 8, 'methodString', someKeyword=value, *args, **kwargs)
print(something.anotherThing()['aDictKey'].moreMethods(valueInfo, 8, 'methodString', someKeyword=value, *args, **kwargs))
something.anotherThing()[(someObj.someDict['itsKey'], 8, True)].moreMethods()
print(something)
print(something.anotherThing)
print(something.anotherThing())
print(someObj)
print(someObj.someDict)
print('itsKey')
print(someObj.someDict['itsKey'])
print(8)
print(True)
print(something.anotherThing()[someObj.someDict['itsKey']])
print(something.anotherThing()[someObj.someDict['itsKey']].moreMethods)
print(something.anotherThing()[someObj.someDict['itsKey']].moreMethods())
我後來會後我自己的解決方案時,我有更多的時間去努力這
你可以看看'pyparsing'。例如:'import pyparsing ne = pyparsing.nestedExpr(opener ='[',closer =']',content ='someDict [「something」] [some_module.someOtherDict [「somethingElse」]]')' –
從未聽說過直到你提到它爲止。這看起來非常有用,謝謝分享! – ColinKennedy