Python代码AttributeError:';非类型';对象没有属性';标题';

Python代码AttributeError:';非类型';对象没有属性';标题';,python,debian,cherrypy,Python,Debian,Cherrypy,我正在尝试运行以下代码,但由于标题中的错误,代码一直失败: 回溯(最近一次呼叫最后一次): 文件“/usr/local/lib/python2.7/dist packages/cherrypy/_cprequest.py”,第670行,作为响应 response.body=self.handler() 文件“/usr/local/lib/python2.7/dist packages/cherrypy/lib/encoding.py”,第217行,调用 self.body=self.oldhan

我正在尝试运行以下代码,但由于标题中的错误,代码一直失败:

回溯(最近一次呼叫最后一次): 文件“/usr/local/lib/python2.7/dist packages/cherrypy/_cprequest.py”,第670行,作为响应 response.body=self.handler() 文件“/usr/local/lib/python2.7/dist packages/cherrypy/lib/encoding.py”,第217行,调用 self.body=self.oldhandler(*args,**kwargs) 文件“/usr/local/lib/python2.7/dist packages/cherrypy/_cpdispatch.py”,第61行,调用 返回self.callable(*self.args,**self.kwargs) 文件“web/800-53-server.py”,第79行,在族中 控件\u list.append('-%s'(id,control,id,control,sc.title.title)) AttributeError:“非类型”对象没有属性“标题”

它似乎出错的代码块如下所示:

@cherrypy.expose
def family(self, id="AC", format="html"):
    id = id.upper()
    family_control_count =  {"AC": 25, "AU": 16, "AT": 5, "CM": 11, "CP": 13, "IA": 11, "IR": 10, "MA": 6, "MP": 8,
        "PS": 8, "PE": 20, "PL": 9, "PM": 16, "RA": 6, "CA": 9, "SC": 44, "SI": 17, "SA": 22}
    families = {"AC": "Access Control", "AU": "Audit and Accountability", "AT": "Awareness and Training", "CM": "Configuration Management",
        "CP": "Contingency Planning", "IA": "Identification and Authentication", "IR": "Incident Response", "MA": "Maintenance",
        "MP": "Media Protection", "PS": "Personnel Security", "PE": "Physical and Environmental Protection", "PL": "Planning",
        "PM": "Program Management", "RA": "Risk Assessment", "CA": "Security Assessment and Authorization",
        "SC": "System and Communications Protection", "SI": "System and Information Integrity", "SA": "System and Services Acquisition"}

    control_list = []
    for control in range(1,family_control_count[id]+1):
        sc = SecControl("%s-%d" % (id, control))
        control_list.append('<div><a href="/control?id=%s-%d">%s-%d</a> - %s</div>' % (id, control, id, control, sc.title.title))

    return """<html>
@cherrypy.expose
def系列(self,id=“AC”,format=“html”):
id=id.upper()
家庭控制计数={“AC”:25,“AU”:16,“AT”:5,“CM”:11,“CP”:13,“IA”:11,“IR”:10,“MA”:6,“MP”:8,
“PS”:8,“PE”:20,“PL”:9,“PM”:16,“RA”:6,“CA”:9,“SC”:44,“SI”:17,“SA”:22}
家庭={“AC”:“访问控制”,“AU”:“审计和问责”,“AT”:“意识和培训”,“CM”:“配置管理”,
“CP”:“应急计划”、“IA”:“识别和认证”、“IR”:“事件响应”、“MA”:“维护”,
“MP”:“媒体保护”、“PS”:“人员安全”、“PE”:“物理和环境保护”、“PL”:“规划”,
“PM”:“项目管理”、“RA”:“风险评估”、“CA”:“安全评估和授权”,
“SC”:“系统和通信保护”,“SI”:“系统和信息完整性”,“SA”:“系统和服务获取”}
控件列表=[]
对于范围内的控制(1,系列控制计数[id]+1):
sc=SecControl(“%s-%d”%(id,控制))
控件\u list.append('-%s'(id,control,id,control,sc.title.title))
返回“”
更多的节目如下:

`#!/usr/bin/python
# -*- coding: utf-8 -*-

import os, os.path
import sys
import random
import string
import json
import yaml
import cherrypy
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('web/templates'))

sys.path.append(os.path.join('lib'))
sys.path.append(os.path.join('data'))
from seccontrol import SecControl
from seccontrolviz import SecControlViz
from utilities import *


class StringGenerator(object):
    @cherrypy.expose
    def index(self):
        return """<html>
          <head>
            <title>800-53 Controls</title>
            <link rel="stylesheet" type="text/css" href="/assets/css/main.css">
          </head>`
`#!/usr/bin/python
#-*-编码:utf-8-*-
导入操作系统,操作系统路径
导入系统
随机输入
导入字符串
导入json
进口yaml
进口樱桃
从jinja2导入环境,FileSystemLoader
env=Environment(loader=FileSystemLoader('web/templates'))
sys.path.append(os.path.join('lib'))
sys.path.append(os.path.join('data'))
从seccontrol导入seccontrol
从seccontrolviz导入seccontrolviz
从实用程序导入*
类StringGenerator(对象):
@樱桃树
def索引(自):
返回“”
800-53控制
`

GovReady
(我假设它是基于导入语句使用的)依赖于
xsltproc
。您可能已将其安装在mac OS上,但未安装在其他机器上。它需要与
sudo-apt-install-xsltproc
或与您的Linux风格相当的软件一起安装,因为它不是pip包

尝试从
800-53-server/lib
目录运行
xsltproc--stringparam controlnumber'AC-1'control2json.xsl../data/800-53-controls.xml
。您正在调用的函数是该命令的包装器

安装该程序后,我得到

{ "id": "AC-1",
  "title": "ACCESS CONTROL POLICY AND PROCEDURES",
...
}

你可以访问sc.title.title,看起来可能是sc.or。理学士学位没有。你们试过打印它们吗?我想可能是因为标题重复了两次?谢谢加布里埃尔,我把标题拿出来了,但还是搞砸了。奇怪的是,它在我的macOS笔记本电脑上运行得很好,但当我尝试在Ubuntu或Debian中使用相同的Python(2.7.x)版本运行它时,我遇到了这个问题,我会假设问题是
SecControl
函数返回
None
,但没有看到该函数是什么,我不能再帮你了。如果你比较一下这两台机器上安装的python包,可能会很有用。使用pip冻结。也许这是不同版本的问题,我进入了兔子洞,在包中跟踪函数调用。这是一条有点风的路,但它得到了回报。我很高兴它对你有用!