You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建AlphaFold2预测结果可视化函数出现AttributeError报错求助

报错根因

你遇到的AttributeError: 'NoneType' object has no attribute 'show'是多个逻辑问题共同导致的,同时代码还存在多个潜在运行错误,修复清单如下:

  1. 参数传值错误:调用show_pdb()时color参数误写为"1DDT"(数字1),正确应为"lDDT"(小写字母L)
  2. 路径匹配规则错误:glob匹配规则写为'.pdb',只会匹配名称恰好为.pdb的文件,无法匹配所有后缀为pdb的结果文件,应改为'*.pdb'
  3. 空列表逻辑漏洞:如果pdb_files为空列表,for循环不会执行,view变量未定义,函数直接返回None,调用.show()就会触发你遇到的报错
  4. 多文件加载逻辑错误:for循环中每次迭代都重新初始化view对象,最终仅返回最后一个pdb文件的视图,前面加载的文件都会被覆盖
  5. 缺失依赖导入:代码未导入py3Dmol库,运行时会触发NameError
  6. 未定义变量引用:color="chain"分支中使用了未定义的homooligomer变量,选择该配色时会触发报错
  7. 缺失辅助函数:后续调用的plot_plddt_legend、plot_confidence函数未定义,运行时会触发报错

修复后完整代码

import os
import re
import glob
import py3Dmol
# 以下两个导入是为了补全你缺失的辅助函数,如果你原有环境已经实现可以删除重写
import matplotlib.pyplot as plt
import numpy as np

#@title Display 3D structure {run: "auto"}
model_num = 1 #@param ["1", "2", "3", "4", "5"] {type:"raw"}
color = "lDDT" #@param ["chain", "lDDT", "rainbow"]
show_sidechains = False #@param {type:"boolean"}
show_mainchains = False #@param {type:"boolean"}
# 补全未定义的同源多聚体参数,你可以根据实际情况调整数值
homooligomer = 1

def get_filepaths(root_path: str, file_regex: str):
    return glob.glob(os.path.join(root_path, file_regex))

rootdir = '/projects/p31492/long_alphafold/alphafold__long_sequence_file'
regex = '*.pdb'
pdb_files = get_filepaths(rootdir, regex)

def show_pdb(model_num=1, show_sidechains=False, show_mainchains=False, color="lDDT"):
    # 先判断是否存在pdb文件,避免空列表报错
    if not pdb_files:
        raise FileNotFoundError(f"在路径{rootdir}下未找到任何pdb文件")
    # 初始化一次view对象,所有pdb都加载到同一个视图里
    view = py3Dmol.view(js='https://3dmol.org/build/3Dmol.js',)
    for file in pdb_files:      
        view.addModel(open(file,'r').read(),'pdb')

        if color == "lDDT":
            view.setStyle({'cartoon': {'colorscheme': {'prop':'b','gradient': 'roygb','min':50,'max':90}}})
        elif color == "rainbow":
            view.setStyle({'cartoon': {'color':'spectrum'}})
        elif color == "chain":
            for n,chain,color_val in zip(range(homooligomer),list("ABCDEFGH"),
                             ["lime","cyan","magenta","yellow","salmon","white","blue","orange"]):
                view.setStyle({'chain':chain},{'cartoon': {'color':color_val}})
        if show_sidechains:
            BB = ['C','O','N']
            view.addStyle({'and':[{'resn':["GLY","PRO"],'invert':True},{'atom':BB,'invert':True}]},
                                {'stick':{'colorscheme':f"WhiteCarbon",'radius':0.3}})
            view.addStyle({'and':[{'resn':"GLY"},{'atom':'CA'}]},
                                {'sphere':{'colorscheme':f"WhiteCarbon",'radius':0.3}})
            view.addStyle({'and':[{'resn':'PRO'},{'atom':['C','O'],'invert':True}]},
                                {'stick':{'colorscheme':f"WhiteCarbon",'radius':0.3}})  
        if show_mainchains:
            BB = ['C','O','N','CA']
            view.addStyle({'atom':BB},{'stick':{'colorscheme':f"WhiteCarbon",'radius':0.3}})

    view.zoomTo()
    return view

# 修复color参数的拼写错误
show_pdb(model_num,show_sidechains, show_mainchains, color=color).show()

# 补全缺失的辅助函数,如果你原有环境已经实现可以删除
def plot_plddt_legend():
    fig = plt.figure(figsize=(2, 0.5))
    gs = fig.add_gridspec(1, 1)
    ax = fig.add_subplot(gs[0])
    cmap = plt.get_cmap('roygb')
    norm = plt.Normalize(50, 90)
    cb = plt.colorbar(plt.cm.ScalarMappable(norm=norm, cmap=cmap),
                 cax=ax, orientation='horizontal', ticks=[50, 60, 70, 80, 90])
    cb.set_label('pLDDT')
    return fig

def plot_confidence(model_num):
    # 这里可以根据你实际的pLDDT数据实现逻辑,示例只返回空图
    fig = plt.figure(figsize=(8, 3))
    plt.title(f'Model {model_num} per-residue confidence score (pLDDT)')
    plt.xlabel('Residue index')
    plt.ylabel('pLDDT')
    plt.ylim(0, 100)
    return fig

if color == "lDDT": plot_plddt_legend().show()  
plot_confidence(model_num).show()

额外注意点

如果你只需要加载指定编号的模型文件,不需要遍历所有pdb,可将regex改为*model_{model_num}*.pdb即可匹配对应编号的结果文件。

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:48:02