前提・実現したいこと
初めて投稿させていただく初心者のものです。至らぬ点も多いかとは思いますがよろしくお願いします。
実現したい事を端的に申し上げますと
データベースにアクセス
→データベースから特定の情報群Aを取得→情報群Aの中から特定の情報A'をリスト形式で取得
→他の情報群B,C,…に対してもB',C'を獲得し辞書形式{A:A',B:B',C:C',…}で保存する
という流れです。
発生している問題・エラーメッセージ
pythonのBioPDBと呼ばれるライブラリを利用して特定の情報Y'を取得しようとしたのですが、
スクリプトを起動させたところlist.appendを行う際に値の取得に失敗し、TypeErrorを起こしてしまいました。
ここで、以下の事を試しました。
①他の情報群Xで試す→成功
②失敗した情報群Yをpythonシェル(ipython)で分割して実行→成功
以上の事を踏まえると自分のスクリプトが特定のデータに対応していない事が考えられるのですが、どの部分が原因なのかが全く分かりません。そこで、②の結果がヒントになるように思えるのですが…
どなたか、スクリプトでまとめて実行する場合とpythonシェル(ipython)で数行ずつ実行(for文の塊レベル)する場合の動作の違いを教えて頂けますでしょうか?
list.append()が成功しないからには、ミュータブルなオブジェクトである事が関係している気はしています。
ヒントとなりそうな事でも良いので、どなたかアドバイスして頂けたら助かります。
表示されるErrormessageは
TypeError: unsupported operand type(s) for 'NoneType' + 'NoneType'
です。
該当のソースコード
python3.6
1resiseq = [] 2cs = [] 3for model in structure.get_list(): 4 for chain in model.get_list(): 5 for residue in chain.get_list(): 6 if residue.get_resname() in aminopool: 7 resiseq.append(residue.get_resname())☜ここは上手くいきます 8 if cs == []: 9 for residue in chain.get_list(): 10 if residue.get_resname() in aminopool: 11 coor = [] 12 xsum = 0 13 ysum = 0 14 zsum = 0 15 for atom in residue.get_list(): 16 coor.append(atom.get_coord())☜ここから上手くいきません([]のままです) 17 xsum += coor[-1][0] 18 ysum += coor[-1][1] 19 zsum += coor[-1][2] 20 resix = xsum/len(coor) 21 resiy = ysum/len(coor) 22 resiz = zsum/len(coor) 23 resicoor.append([resix,resiy,resiz]) 24 del coor #1度消さなければ上手くappend出来ないため! 25 cs.append(resiseq) 26 del resiseq 27 resiseq = [] 28#Errormessageについて尋ねられたのでErrorが生じる場所まで追記します。該当する部分が分からないためにコードが長くなってしまい申し訳ありません 29maxx = None 30maxy = None 31maxz = None 32minx = None 33miny = None 34minz = None 35for c in resicoor: 36 x = c[0] 37 y = c[1] 38 z = c[2] 39 try: 40 if x > maxx: 41 maxx = x 42 if x < minx: 43 minx = x 44 if y > maxy: 45 maxy = y 46 if y < miny: 47 miny = y 48 if z > maxz: 49 maxz = z 50 if z < minz: 51 minz = z 52 except TypeError: 53 maxx = x 54 minx = x 55 maxy = y 56 miny = y 57 maxz = z 58 minz = z 59point = [(maxx + minx)/2,(maxy+miny)/2,(maxz+minz)/2] 60????ここでTypeError: unsupported operand type(s) for 'NoneType' + 'NoneType'が生じます。 61 62例外処理がしっかりなされていた場合、xやyがNonetypeでない限りこのような事にはならないと思いxやyに値を代入する前の元のリストresicoorを見ると[]になっていたため、ここに原因があると思っていたのですが…
回答1件
あなたの回答
tips
プレビュー