首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:类型为'NoneType‘的对象在应用程序部署中没有len() Python

TypeError:类型为'NoneType‘的对象在应用程序部署中没有len() Python
EN

Stack Overflow用户
提问于 2020-01-11 00:22:39
回答 2查看 916关注 0票数 0

我只是在学习python,我正在尝试运行我的应用程序,但是得到了以下内容:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/plugins/bluegreen.py", line 433, in <module>
    cnames = [bluegreen.get_cname(green), bluegreen.get_cname(blue)]
  File "/Users/plugins/bluegreen.py", line 66, in get_cname
    if len(data.get("cname")) == 0:
TypeError: object of type 'NoneType' has no len()

以下是第66和433行的内容:

66:

代码语言:javascript
复制
def get_cname(self, app):
    response = self.get("/apps/{}".format(app))
    data = json.loads(response.read())
    if len(data.get("cname")) == 0:
      return None
    return data.get("cname")

433:

代码语言:javascript
复制
cnames = [bluegreen.get_cname(green), bluegreen.get_cname(blue)]

编辑1:

如果我放置一个打印(数据),我会得到以下信息:

代码语言:javascript
复制
{u'entrypoints': [], u'routeropts': {}, u'description': u'', u'repository': u'git@10.10.1.1.nip.io:hello-green.git', u'tags': [], u'lock': {u'Owner': u'', u'Reason': u'', u'AcquireDate': u'0001-01-01T00:00:00Z', u'Locked': False}, u'routers': [{u'type': u'traefik', u'name': u'traefik', u'opts': {}, u'address': u'hello-green.10.10.1.1.nip.io'}], u'deploys': 0, u'routingsettings': None, u'teams': [u'admin'], u'platform': u'go', u'teamowner': u'admin', u'plan': {u'router': u'traefik', u'swap': 0, u'cpushare': 100, u'name': u'autogenerated', u'memory': 0}, u'ip': u'hello-green.10.10.1.1.nip.io', u'owner': u'admin@shipa.io', u'router': u'traefik', u'units': [], u'pool': u'gce', u'name': u'hello-green'}
Traceback (most recent call last):
  File "/Users/brunoandrade/.shipa/plugins/bluegreen.py", line 434, in <module>
    cnames = [bluegreen.get_cname(green), bluegreen.get_cname(blue)]
  File "/Users/brunoandrade/.shipa/plugins/bluegreen.py", line 67, in get_cname
    if len(data.get("cname")) == 0:
TypeError: object of type 'NoneType' has no len()

编辑2:

不知道为什么我没有名字钥匙,因为我在这里得到它:

代码语言:javascript
复制
  config = Config.load('shipa-bluegreen.ini')

  app_name = config['name']
  blue = "%s-blue" % app_name
  green = "%s-green" % app_name

  bluegreen = BlueGreen(token, target, config)

  apps = [blue, green]
  cnames = [bluegreen.get_cname(green), bluegreen.get_cname(blue)]

它是从我在文件中找到的Shia-BlueGreen.ini号上读取的:

代码语言:javascript
复制
[Application]
name: hello

任何帮助都是非常感谢的。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-01-11 00:43:02

你把数据打印出来

代码语言:javascript
复制
{u'entrypoints': [], u'routeropts': {}, u'description': u'', u'repository': u'git@10.10.1.1.nip.io:hello-green.git', u'tags': [], u'lock': {u'Owner': u'', u'Reason': u'', u'AcquireDate': u'0001-01-01T00:00:00Z', u'Locked': False}, u'routers': [{u'type': u'traefik', u'name': u'traefik', u'opts': {}, u'address': u'hello-green.10.10.1.1.nip.io'}], u'deploys': 0, u'routingsettings': None, u'teams': [u'admin'], u'platform': u'go', u'teamowner': u'admin', u'plan': {u'router': u'traefik', u'swap': 0, u'cpushare': 100, u'name': u'autogenerated', u'memory': 0}, u'ip': u'hello-green.10.10.1.1.nip.io', u'owner': u'admin@shipa.io', u'router': u'traefik', u'units': [], u'pool': u'gce', u'name': u'hello-green'}

您可以清楚地看到这里没有名为"cname“的键。

票数 0
EN

Stack Overflow用户

发布于 2020-01-11 00:50:52

cname中没有data密钥。如果找不到密钥,data.get("cname")将返回None,但可以指定显式默认设置。使用空字符串作为默认值。

代码语言:javascript
复制
def get_cname(self, app):
    response = self.get("/apps/{}".format(app))
    data = json.loads(response.read())
    if len(data.get("cname", "")) == 0:
      return None
    return data.get("cname")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59690596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档