2017-12-30 65 views
-4

誰も私に次の問題を助けることができますか? 辞書を返す前の関数があります。今私は新しいものを作るためにこの関数が必要ですが、私は辞書で何かする必要があります。私が何をしようとしているかを示すために、dictionary(fasta_filename)は私の以前の機能です。関数の出力を使って辞書を作成する方法は?

def test(fasta_filename, minMW, maxMW): 
    interval = minMW, maxMW 
    for key, value in dictionary(fasta_filename).items(): 
     if value in interval: 
      print(key) 
     else: 
      print('intervals do not match') 

これはちょうど私が何をしたいしようとし始めているが、あなたはそれを行うにしようと、私は持っている主な問題は.items()のようなあなたが辞書でできることは、動作していないということです関数。エラーは'NoneType' object has no attribute 'items'と表示されます。 function.items()の場合は、その機能は辞書であると仮定しているが、そうではないと考えているので、私はこのエラーを理解している。 私はまだこれすべてに新しい、おそらくあなたが言うことができるが、誰かが私にヒントを与えることができればそれを感謝します。 :)

+0

ここにはいくつかの問題があります:(a) 'value in interval'では、間隔に対して値をチェックするのではなく、値が' minMW'または 'maxMW'であるかどうかをチェックします。さらに、この関数は出力を提供しません。入出力は 'print'です。あなたは 'return'キーワードで物事を'返す '。 –

+0

あなたの 'dictionary'関数は少なくとも' None'を返します。その場合、 'dictionary(fasta_filename).items()'は動作しませんが、あなたの関数が 'dict'オブジェクトを実際に返した。 'dictionary'関数を見ることなく、私は推測しかできません。 –

+0

'function.items()'は 'dictionary.items()'とは異なり、エラーは少し異なります。 'AttributeError: 'function'オブジェクトには 'items'属性がありません。 'がありますが、あなたのケースでは' ''' NoneType ''オブジェクトに属性 'items'" 'がありません。あなたは*関数*を正確に呼び出すので、 '辞書(...)' - 関数を呼び出すと、 '.items()'メソッド呼び出しは関数呼び出しの*戻り値*を処理しています。この場合、エラーメッセージはあなたに 'NoneType'、つまり*が' None' *であることを伝えています。 –

答えて

0

あなたはこのようなテストを修正することができますが、依然として印刷物しか印刷されません。

def dictionary(fn)関数のreturnステートメントを変更して、None -dictとデータを含むdictの異なる出力をチェックし、チェックされます。

def dictionary(fn): 
    # you do stuff here with your file, make sure to NOT return None but 
    # always retunr at least an empty dict if your actions on your file 
    # do not result in a filled dictionary 
    return {"dummy1" : 55, "dummy2" : 97, "dummy3" : 12345} 
    # return None # uncomment this and comment the one above for a None-Dict 

def test(fasta_filename, minMW, maxMW): 
    interval = range(minMW, maxMW+1) # this is the interval [minMW..maxMW] including both 
    dic = dictionary(fasta_filename) 
    if not dic: 
     print('dictionary is None') 
     return None # leave test method 

    for key, value in dic.items(): 
     if value in interval: 
      print(key) 
     else: 
      print('intervals do not match for', key) 

test("does not matter, dummy data provided internally",60,120) 

出力(パイソン3.6):

intervals do not match for dummy1 
dummy2 
intervals do not match for dummy3 

又は

dictionary is None 

ものdef dictionary(fn)戻りに応じ。

+0

ありがとうございます、私は戻り値と印刷の違いが分かりました。私はどのように機能を持っていますが、それは動作しますが、一致していない間隔の間だけです。 {'seq_7009':(6236.9764、6367.049999999999)、 'seq_418':(3716.3642000000004,3796.4124000000006)、...}}のような辞書の出力が、浮動小数点数私は 'interval = range(minMW、maxMW + 1、0.00000000001)'のような範囲でステップを追加しようとしましたが、 'TypeError:' float 'オブジェクトは整数として解釈できません。 –

関連する問題