0

Python 2.7、最新の BioPython および BioSQL を使用して Ubuntu 12.10 で実行されます。

MySQL ベースの BioSQL サーバーの確立に成功し、シーケンスをシステムに適切にロードできます (または、シーケンスが適切であるように見えます。MySQL にテーブルが正しく入力され、通常はエラーが発生しません)。

ただし、'lookup' で取得すると、DBSeqRecords の ID、名前、および説明にしかアクセスできません。注釈と機能はオンデマンドで呼び出されるはずですが、これによりクラッシュします。例えば:

 File "/usr/lib/pymodules/python2.7/Bio/SeqRecord.py", line 595, in __str__
    lines.append("Number of features: %i" % len(self.features))
  File "/usr/lib/pymodules/python2.7/BioSQL/BioSeq.py", line 516, in __get_features
    self._primary_id)
  File "/usr/lib/pymodules/python2.7/BioSQL/BioSeq.py", line 280, in _retrieve_features
    feature.location = SeqFeature.FeatureLocation(start, end)
  File "/usr/lib/pymodules/python2.7/Bio/SeqFeature.py", line 561, in __init__
    raise TypeError(start)
TypeError: 0

ここで何が起こっているのか分かりますか?

4

1 に答える 1

0

ちょうど今週、同じエラーが発生しました。

機能の開始位置と終了位置は、MySQL から long (int ではなく) 型として取得されますが、SeqFeature.py は、FeatureLocation をインスタンス化するときに、開始と終了にのみ int を想定します。mysqlサーバー、MySQLdb、BioSeqDatabase、またはSeqFeatureで何が変更されて問題が発生したのかわかりません。

biopython 開発者の 1 人が長期的な解決策を提供できることを願っていますが、これらは一時的な修正の提案です。

  • BioSeqDatabase によって使用される MySQLdb 接続にアクセスして、その接続関数の conv キーワード パラメータを使用して変換動作を変更してみてください (私はこれを行うことができませんでした)。

  • BioSeqDatabase をハックして、MySQL から値がフェッチされた後に start_pos と end_pos が int に変換されるようにします (私はこれを行っていません)。

  • SeqFeature.py をハックして、FeatureLocation オブジェクトをインスタンス化するときに開始と終了に長い型を許可します (これは私が行ったことです)。これを変える:

    if isinstance(start, AbstractPosition):
        self._start = start
    elif isinstance(start, int):
        self._start = ExactPosition(start)
    else:
        raise TypeError(start)
    if isinstance(end, AbstractPosition):
        self._end = end
    elif isinstance(end, int):
        self._end = ExactPosition(end)
    else:
        raise TypeError(end)
    

    これに:

    if isinstance(start, AbstractPosition):
        self._start = start
    elif isinstance(start, int) or isinstance(start, long):
        self._start = ExactPosition(start)
    else:
        raise TypeError(start)
    if isinstance(end, AbstractPosition):
        self._end = end
    elif isinstance(end, int) or isinstance(end, long):
        self._end = ExactPosition(end)
    else:
        raise TypeError(end)
    
于 2013-03-15T00:49:54.037 に答える