【发布时间】:2017-11-16 05:30:48
【问题描述】:
如何导入相互导入的函数和字典。这两个文件已经在同一个目录中,因此没有 nid 来导入 sys.另外,我这是递归的,这就是它无法导入的原因。如何从彼此的文件中导入字典而不使其递归并导致错误?
我确实去了这个网站here,但它没有回答我的问题,也没有提供任何示例代码来指导我,因此我用测试代码创建了这个问题来解释我的问题。
假设我有这两个文件:boxA 和 boxR,每个文件都有一个字典 keyA 和 keyR 以及名为 generatekeyA 和 generatekeyR 的函数
在盒子A中:
import json
from tinydb import TinyDB, Query
from boxR import keyR
def generatekeyA():
keyA = {}
serialnoA = 'Serial_noA'
secretidA = 'Secret_idA'
count = 0
while (count <5):
serial = generate key
id = generate id
keyA[serialnoA].append(serial)
keyA[secretidA].append(id)
with open("/home/pi/Desktop/json/output.json", 'w+'):
db = TinyDB('/home/pi/Desktop/json/output1.json')
table = db.table('A KEYS')
db.insert_multiple([{'Serial number A' : keyA[serialnoA]}])
db.insert_multiple([{'Secret id A' : keyA[secretidA]}])
db.insert_multiple([{'Secret id R' : keyR[secretidR]}])
generatekeyA()
在盒子里:
import json
from tinydb import TinyDB, Query
from boxA import keyA
def generatekeyR():
keyR = {}
serialnoR = 'Serial_noR'
secretidR = 'Secret_idR'
count = 0
while (count <5):
serialR = generate key
idR = generate id
keyR[serialnoR].append(serialR)
keyR[secretidR].append(idR)
with open("/home/pi/Desktop/json/output2.json", 'w+'):
db = TinyDB('/home/pi/Desktop/json/output2.json')
table = db.table('R KEYS')
db.insert_multiple([{'Serial number R' : keyR[serialnoR]}])
db.insert_multiple([{'Secret id R' : keyR[secretidR]}])
db.insert_multiple([{'Secret id A' : keyA[secretidA]}])
generatekeyA()
让我解释一下上面的代码。我有 2 个为我生成密钥的文件,之后,我必须将输出导出到 json 文件中。 output.json 文件将 keyA 自己的序列号和密钥 id 以及只有 keyR 的 secretid 和反之亦然打印到 output2.json 文件中。但问题是,尽管我研究了递归输出,但我仍然不明白如何修复它,因为它没有提供任何示例代码作为指导。解决此问题的最佳方法是什么,我不必对文件进行太多更改?
错误告诉我可能是递归错误:
Traceback (most recent call last):
File "/home/pi/Desktop/boxA.py", line 7, in <module>
from boxR import keyR
File "/home/pi/Desktop/boxR.py", line 11, in <module>
from boxA import keyA
File "/home/pi/Desktop/boxA.py", line 7, in <module>
from boxR import keyR
ImportError: cannot import name 'keyA'
【问题讨论】:
-
我不确定这是否可能,因为正在发生递归。 Python 假设你需要
keyR来运行boxA并且你需要keyA来运行boxR,两者都不能满足另一个。看起来(从这个 sn-p)你并不特别需要这些变量? -
@Jérôme 不,上面的链接没有提供示例代码和示例答案供我理解。
-
@ISOmetric 但是,我需要运行 keyA 中的代码,同时打印出 key R 的输出,反之亦然。解决这个问题的最佳方法是什么?
-
我有点不确定您的缩进 - 是
generatekeyA/R()函数的所有内容部分还是您定义了一个空函数?因为我认为它无论如何都行不通,就这样布置。
标签: python python-3.x dictionary recursion tinydb