首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“NoneType”和“浮动”错误--如何避免NoneType

“NoneType”和“浮动”错误--如何避免NoneType
EN

Stack Overflow用户
提问于 2020-03-07 10:21:44
回答 2查看 833关注 0票数 1

我试图构造我的代码,所以如果NoneType是结果,它将被转换为0。然而,我似乎仍然没有通过到下一个功能。为什么会这样呢?

get_profit_loss_value_fees中第321行中的错误

代码语言:javascript
复制
result = self.get_profit_loss_value() - self.get_fees()

TypeError:不支持-的操作数类型:“NoneType”和“float”

代码语言:javascript
复制
def get_profit_loss_value(self):
    if self.get_exit_cpu() > 0:
        if self.type == 'Long':
            result = self.get_entries().aggregate(
            get_profit_loss_value=Sum('amount', output_field=models.FloatField()
                                           ) * (self.get_exit_cpu() - self.get_entry_cpu()))['get_profit_loss_value']
            return 0 if result is None else result
        elif self.type == 'Short':
            ...
    else:
        return 0

def get_profit_loss_value_fees(self):
    result = self.get_profit_loss_value() - self.get_fees()
    return result

作为请求的整个跟踪:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\core\handlers\base.py", line 145, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\core\handlers\base.py", line 143, in _get_response
    response = response.render()
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\response.py", line 105, in render
    self.content = self.rendered_content
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\backends\django.py", line 61, in render
    return self.template.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 171, in render
    return self._render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\defaulttags.py", line 209, in render
    nodelist.append(node.render_annotated(context))
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\defaulttags.py", line 309, in render
    return nodelist.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\defaulttags.py", line 309, in render
    return nodelist.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 986, in render
    output = self.filter_expression.resolve(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 670, in resolve
    obj = self.var.resolve(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 795, in resolve
    value = self._resolve_lookup(context)
  File "C:\Users\winkl\tj3\venv\lib\site-packages\django\template\base.py", line 857, in _resolve_lookup
    current = current()
  File "C:\Users\winkl\tj3\portfolios\models.py", line 321, in get_profit_loss_value_fees
    result = self.get_profit_loss_value() - self.get_fees()
TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-07 10:29:15

您总是可以为def get_profit_loss_value(self):制作一个包装器。

代码语言:javascript
复制
def get_profit_loss_value_or_None(self):
   # All code as now

def get_profit_loss_value(self):
    ret = self.get_profit_loss_value_or_None()
    return 0 if ret is None else ret

这也可以防止将来发生的任何变化,这些变化都会导致None的意外返回。

票数 4
EN

Stack Overflow用户

发布于 2020-03-07 10:27:37

self.type可能存在这样一种可能性,即您不是在检查或检查,而是没有返回任何内容。如果不返回任何内容,python将为您返回None

因此,例如,如果self.get_exit_cpu()大于0,但self.type是您没有检查的东西,比如"Long Long",那么else语句不会执行,也不会手动返回--这意味着None将被返回。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60576545

复制
相关文章

相似问题

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