简体   繁体   English

'NoneType' 和 'float' 错误 - 如何避免 NoneType

[英]'NoneType' and 'float' Error - How to avoid NoneType

I've tried to structure my code so if NoneType is a result it will be converted into 0. However, I still seem to get None past through to the next function.我试图构建我的代码,所以如果 NoneType 是结果,它将被转换为 0。但是,我似乎仍然没有通过下一个函数。 Why is that?这是为什么?

Error in line 321, in get_profit_loss_value_fees第 321 行错误,在 get_profit_loss_value_fees 中

result = self.get_profit_loss_value() - self.get_fees()

TypeError: unsupported operand type(s) for -: 'NoneType' and 'float' TypeError: 不支持的操作数类型 -: 'NoneType' 和 'float'

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

As requested Entire Traceback:根据要求整个追溯:

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'

There's probably a possibility for self.type that you are either not checking or checking but then not returning anything. self.type可能有可能您没有检查或检查但没有返回任何内容。 If you don't return anything, python will return None for you.如果您不返回任何内容,python 将为您返回None

So if for example self.get_exit_cpu() is bigger than 0, but self.type is something you're not checking, say "Long Long" , then the else statement won't execute and nothing will be manually returned - meaning None will be returned.因此,例如,如果self.get_exit_cpu()大于 0,但self.type是您未检查的内容,请说"Long Long" ,则else语句将不会执行并且不会手动返回任何内容 - 意味着None将被退回。

You could always make a wrapper around def get_profit_loss_value(self):你总是可以围绕def get_profit_loss_value(self):做一个包装def get_profit_loss_value(self):

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

This may also protect against any future changes which result in unforeseen returns of None .这也可以防止任何导致None不可预见的回报的未来变化。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:“TypeError: float() argument must be a string or a number, not 'NoneType'”,但是没有'NoneType'? - Error: "TypeError: float() argument must be a string or a number, not 'NoneType'", but there is no 'NoneType'? 如何处理“ Nonetype”错误? - How to handle a “Nonetype” error? 如何避免错误:'NoneType' object 没有属性 'text'? - How to avoid error: 'NoneType' object has no attribute 'text'? 在arcpy中迭代for循环时如何避免出现noneType错误 - How to avoid getting a noneType error when iterating in for loop in arcpy 类型错误:无法排序的类型:NoneType() > int() 浮点错误 - TypeError: unorderable types: NoneType() > int() float error 如何避免 BeautifulSoup 中的“TypeError: 'NoneType' object is not subscriptable”? - How to avoid “TypeError: 'NoneType' object is not subscriptable” in BeautifulSoup? 在 Python 中组合列表时如何避免 Nonetype - How to avoid Nonetype when combining lists in Python Python中的NoneType错误如何处理? - How to deal with NoneType error in Python? 对于这段代码,如何避免此错误TypeError:'NoneType'对象不可下标 - How do I avoid this error for this piece of code-TypeError: 'NoneType' object is not subscriptable 条形图给出错误:float() 参数必须是字符串或数字,而不是“NoneType” - Bar Graph gives error: float() argument must be a string or a number, not 'NoneType'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM