2

相互にインポートする関数と辞書をインポートするにはどうすればよいですか。これらの 2 つのファイルは既に同じディレクトリにあるため、sys をインポートする nid はありません。また、これは再帰的であるため、インポートできません。再帰的にしてエラーを発生させずに、互いのファイルから辞書をインポートするにはどうすればよいですか?

ここでこのWebサイトにアクセスしましたが、質問に答えず、ガイドとなるサンプルコードも提供しなかったため、問題を説明するテストコードを使用してこの質問を作成しました。

次の 2 つのファイルがあるとしましょう: 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()

boxR:

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 のシークレット ID とその逆のみを 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'
4

3 に答える 3

1

これは循環依存です。モジュールの基本構造、したがって依存関係グラフを変更せずにどのように解決できるかわかりません。両方の辞書を別のファイルに定義してインポートしてみませんか。あなたのコードのように見えるので、とにかく空の辞書です。

この記事は興味深いかもしれません。本質的に、再帰的な依存関係を行うと、インポートされたモジュールは、インポートステートメントの実行時に空のモジュールとしてお互いを見つけます。したがって、このエラーが表示されます

于 2017-06-14T07:46:54.187 に答える