在条件语句中检查对象类型的正确方法是什么 - python

左下角

在条件语句中检查对象类型的正确方法是什么?

编辑:看来我误诊了这个问题。我的条件语句没有触发,因为 json.dumps 代码没有像我想象的那样工作。尽管错误消息说的o.__class__.nameint64,但在引发错误之前它实际上从未具有该值(我通过逐步调试进行了检查)。如何工作的,我不太清楚,这是另一天的主题。我将在下面回答这个问题。

我可以按照以下 Lenik 的建议解决我遇到的问题。

背景:

执行时

from json import dumps
json.dumps(vars(my_object))

我收到一个错误

File "C:\ProgramData\Anaconda3\lib\json\encoder.py", line 180, in 
  default    o.__class__.__name__)
TypeError: Object of type 'int64' is not JSON serializable

json.dumps在 python 中使用时出错,在运行代码后,我使用该vars语句将某些对象转换为字典。

我得出结论,在对象的某个地方我使用的是 numpyint64而不是标准的 python int,这导致了错误。

问题是 my_object 有很多层和地方可以看。

所以我认为聪明的做法是在第 180 行放置一个条件断点(我可以在 PyCharm 中做到这一点),C:\ProgramData\Anaconda3\lib\json\encoder.py条件是

 o.__class__.__name__ == "int64"

然后我可以在调试模式下运行代码,并希望找到有问题的层/变量。

我已经尝试过,以及在我的dumps调用和调用堆栈中的最低点之间的几个点调用堆栈中,但我的断点从未被触发。

因此,我怀疑我没有使用正确的条件语句来检查正在序列化的对象的名称......?

因此我的问题是:在条件语句中检查对象类型的正确方法是什么?

这是导致问题的对象:

[  
   {  
      "combat_id":null,
      "units":[  
         {  
            "unit_id":7,
            "engagements":{  
               "front":[  
                  8,
                  -20,
                  -20
               ],
               "left":[  

               ],
               "right":[  

               ],
               "rear":[  

               ]
            }
         },
         {  
            "unit_id":8,
            "engagements":{  
               "front":[  
                  7,
                  -20,
                  80
               ],
               "left":[  

               ],
               "right":[  

               ],
               "rear":[  

               ]
            }
         }
      ],
      "combat_log":{  
         "combat_id":null,
         "full_log":[  
            [  
               {  
                  "initiative_step":"asf",
                  "_load_printables":true,
                  "striker_names":[  
                     "Pieka's Spear Boys",
                     "Coert's Pennyless Pokers"
                  ],
                  "striker_descs":[  
                     "High Elf Core Infantry",
                     "High Elf Core Infantry"
                  ],
                  "striker_players":[  
                     "Pieka",
                     "Coert"
                  ],
                  "striker_qtys":[  
                     25,
                     21
                  ],
                  "target_names":[  
                     "Coert's Pennyless Pokers",
                     "Pieka's Spear Boys"
                  ],
                  "target_descs":[  
                     "High Elf Core Infantry",
                     "High Elf Core Infantry"
                  ],
                  "target_players":[  
                     "Coert",
                     "Pieka"
                  ],
                  "target_qtys":[  
                     21,
                     25
                  ],
                  "attack_types":[  
                     "melee",
                     "melee"
                  ],
                  "attacks":[  
                     20,
                     21
                  ],
                  "to_hit_dcs":[  
                     4,
                     4
                  ],
                  "hits":[  
                     10,
                     10
                  ],
                  "to_wound_dcs":[  
                     4,
                     4
                  ],
                  "savable_wounds":[  
                     5,
                     5
                  ],
                  "armor_dcs":[  
                     5,
                     5
                  ],
                  "armor_saves":[  
                     1,
                     1
                  ],
                  "ward_dcs":[  
                     7,
                     7
                  ],
                  "ward_saves":[  
                     0,
                     0
                  ],
                  "unsaved_wounds":[  
                     4,
                     4
                  ],
                  "remaining_wounds":[  
                     17,
                     21
                  ],
                  "input":[  
                     ""
                  ],
                  "printables":[  
                     "<dominus_core.objects.sub_classes.combat.init_step_log.PrintableEntry object at 0x000000000EA72B70>",
                     "<dominus_core.objects.sub_classes.combat.init_step_log.PrintableEntry object at 0x000000000EA92C88>"
                  ],
                  "printable_strings":[  

                  ],
                  "longest_name":1,
                  "_longest_name":28
               }
            ]
         ],
         "easy_log":[  

         ]
      }
   }
]
莱尼克

您可以为标准 json 序列化程序无法识别的对象创建序列化程序:

def my_json_serializer(obj):
    if isinstance(obj, int64):
        return int(obj)    # or whatever other conversion you'd prefer
    raise TypeError ("Type %s not serializable" % type(obj))

然后像这样使用它:

json.dumps( vars(my_object), default=my_json_serializer)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Python 的 if 语句中分组条件的正确语法是什么?

python中的最佳方法是什么:if语句中的多个OR或IN?

检查对象是否为类型的正确方法是什么?泛型?

python的def语句中'->'的用法是什么

“。”的用途是什么 在python import语句中

多次检查“无”-Python中正确的方法是什么

Python是否在多条件if语句中检查ALL条件?

在Python中检查类型的规范方法是什么?

在 Python 中封装条件的正确方法是什么?

在python中构造类,对象的正确方法是什么

什么是。在Python中的import语句中是什么意思?

在 Python 中,return 语句中尾随逗号的目的是什么?

Selenium python:webdriverwait.until语句中的“ lambda”是什么

Python的代码对象是什么类型?

python中的JSON对象的类型是什么?

在Java 8中检查链接语句中的null或检查异常的正确方法是什么?

排序Python`import x`和`from x import y`语句的正确方法是什么?

在Python中使用多重处理,导入语句的正确方法是什么?

python中基于对象名称实例化对象的正确方法是什么?

确定对象在Python中是否是类似字节的对象的正确方法是什么?

Python:如何检查对象是否为datetime.date类型?

Python C API:如何检查对象是否是类型的实例

为什么在条件语句中不检查流密封对象类型属性

Cython中的枚举是检查对象的最佳方法是什么?

将Python模拟的autospec用于对象方法的正确方法是什么?

如果对象在 angular 2 模板中未定义,那么检查对象属性的正确方法是什么?

在python中将“或”与if条件一起使用的正确方法是什么

使用Python在Postgresql中插入INET类型数组的正确方法是什么(psycopg2库)

在python中使用类型提示注释路径的正确方法是什么?