【问题标题】:How to get an integer value to a complex dictionary如何获取复杂字典的整数值
【发布时间】:2017-12-06 09:09:03
【问题描述】:

这里 abc 的值是一个整数,total 是一个包含另一个字典的字典。但是当我运行这一行时,

    total[div]['total_transport_allowance'] = abc

显示此错误:"KeyError: None" 请帮忙

我想从这个语句中得到 abc 的值到键 'total_transport_allowance'

def print_excel_report(self,cr,uid,ids,data,context=None):
    result = self._get_lines(cr,uid,ids,data)
    filename= 'PayrollRegister.xls'
    workbook= xlwt.Workbook(encoding="UTF-8")
    sheet= workbook.add_sheet('Payroll Register',cell_overwrite_ok=True)
    style = xlwt.easyxf('font:height 400, bold True, name Arial; align: horiz center, vert center;borders: top medium,right medium,bottom medium,left medium')
    a = range(1,10)
    row = 1
    col =0
    header = ['Division','Basic','Transport Allowance']
    style2 = xlwt.easyxf('font: bold 1')
    total = {}

    for index,data in enumerate(result):
        div = data.get('Division',False)
        abc = data.get('transport_allowance',False) or 0

        if div:
            if div in total:
                total[div]['total_basic'] = total[div]['total_basic'] +  data.get('basic',0)
                total[div]['total_transport_allowance'] = total[div]['total_transport_allowance'] +  abc
            else:
                total[div] = {}
                total[div]['total_basic'] =  data.get('basic',0)
                total[div]['total_transport_allowance'] = abc

        else:
            if 'Undefined' in total:
                total['Undefined']['total_basic'] = total['Undefined']['total_basic'] +  data.get('basic',0)
                total[div]['total_transport_allowance'] = total[div]['total_transport_allowance'] + abc

            else:
                total['Undefined'] = {}
                total['Undefined']['total_basic'] =  data.get('basic',0)
                total[div]['total_transport_allowance'] = abc
        .......
        .....

【问题讨论】:

  • 请向我们展示更多关于该问题的代码。尤其是 divabc 是什么。理想情况下,一个可自行运行且仍能显示您的问题的最小示例。
  • abc 的值从 0 开始。div 是一个内部字典。
  • 通过阅读您的错误,div 为无。发布minimal reproducible example
  • 真的....尝试重现您的错误的最小示例
  • 实际阅读How to create a Minimal, Complete, and Verifiable example。你需要付出一些努力来解决这个问题。

标签: openerp odoo-8


【解决方案1】:

尝试从所有反对票中拯救一些东西:

你有一个 if 语句检查 div 的真实性。在虚假情况下,您然后使用 div 来访问总计。

你有:

if div:
    # stuff
else:
    # stuff
    total[div]['total_transport_allowance'] = abc

由于total没有key div,所以这行不通。

你需要像total[div] = {}这样的东西

【讨论】:

  • 不会创建一个新字段为total-->div-->total_transport_allowance
  • 因为在其他情况下,它工作正常。它仅在 "total_transport_allowance" 的情况下显示错误,因为这里有些值是空白的,而在其他情况下,没有值是空白的。
  • total[div] = {} 存在
  • 在这一点上可能会浪费我的时间来解释。当 div 具有不同的值时,total[div] = 0 在 if 语句的另一个分支中。
【解决方案2】:

您收到此错误是因为 divNone

 if div:
    ....
    ....
 else:
    ...
    ...
    # div here is None or False ..
    # you cannot use it as key!!
    total[div]['total_transport_allowance'] = abc

您需要先在此处定义密钥。所以在哪里 当 div 为 None 时,你想放 abc。

编辑

不知道 div 不在data.get('Division',False)中的时候应该取什么值:

    div = data.get('Division', False)
    ...
    ...
    if div:
       .....
    else:
        # assing a value to div
        div = 'NEW_VALUE'
        # add dictionary there
        total[div] = {}
        if 'Undefined' in total:
            ....
        ...
        ...

【讨论】:

  • 如何先定义一个key?由于字典复杂而令人困惑
  • 检查我的编辑希望这能让你知道你应该做什么
  • Tchi ,这部分工作正常。在某些情况下,total_transport_allowance 的值是 none,这导致 None Error 无论如何感谢您的帮助
【解决方案3】:
total[div]['total_transport_allowance'] = {}

这行得通.. 我在

中做过这样的事情
total['Undefined']['total_transport_allowance'] = {}

还有.. 感谢大家的帮助

【讨论】:

    【解决方案4】:

    KeyError 为 None 表示未定义字典。 div 是应该定义的字典。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多