当前位置:  开发笔记 > 编程语言 > 正文

什么是Python的var_dump()的Python等价物?

如何解决《什么是Python的var_dump()的Python等价物?》经验,为你挑选了6个好方法。

在PHP中调试时,我经常发现在我的代码中简单地插入var_dump()以向我展示变量是什么,它的值是什么,以及它包含的任何内容都是相同的.

什么是一个很好的Python相当于此?



1> Jan..:

我认为最好的等同于PHP的var_dump($foo, $bar)是结合print使用vars:

print vars(foo),vars(bar)


-1,这仅适用于某些类型的变量,而不是所有变量.请改为使用`pprint`或`repr`
看起来vars工作,变量必须有字典信息,否则你得到"TypeError:vars()参数必须有__ dict __属性".
注意:对于python3,您需要使用诸如`print(vars(foo))`之类的括号。

2> Martin v. Lö..:

要很好地显示值,可以使用pprint模块.使用它转储所有变量的最简单方法就是这样做

from pprint import pprint

pprint(globals())
pprint(locals())

如果您在CGI中运行,那么一个有用的调试功能是cgitb模块,它将局部变量的值显示为回溯的一部分.


怎么样显示var的类型?像Null/None,String,Object ..
这很有帮助.我是一个Python noob,但似乎有帮助我的情况是使用`.__ dict__`,例如`pprint(object .__ dict __)`.

3> Hai Phaikawl..:

与PHP最接近的var_dump()是内置模块中pprint()getmembers()函数inspect:

from inspect import getmembers
from pprint import pprint
pprint(getmembers(yourObj))



4> Cody Casterl..:

PHP的var_export()通常显示对象的序列化版本,可以exec()重新创建对象.最接近Python的是repr()

"对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时会产生具有相同值的对象[...]"


我想你在想'var_export`.

5> sha256..:

我为PHP的var_dump编写了一个非常轻量级的替代品,以便在Python中使用并在以后使其成为开源.

GitHub:https://github.com/sha256/python-var-dump

您可以使用pip以下命令安装它:

pip install var_dump



6> Zoredache..:

所以我从这个问题和另一个问题中得到了答案,并在下面提出.我怀疑这对于大多数人来说并不是pythonic,但我真的想要一些东西让我深刻展示一些未知变量的值.我将不胜感激任何有关如何改进或更轻松地实现相同行为的建议.

def dump(obj):
  '''return a printable representation of an object for debugging'''
  newobj=obj
  if '__dict__' in dir(obj):
    newobj=obj.__dict__
    if ' object at ' in str(obj) and not newobj.has_key('__type__'):
      newobj['__type__']=str(obj)
    for attr in newobj:
      newobj[attr]=dump(newobj[attr])
  return newobj

这是用法

class stdClass(object): pass
obj=stdClass()
obj.int=1
obj.tup=(1,2,3,4)
obj.dict={'a':1,'b':2, 'c':3, 'more':{'z':26,'y':25}}
obj.list=[1,2,3,'a','b','c',[1,2,3,4]]
obj.subObj=stdClass()
obj.subObj.value='foobar'

from pprint import pprint
pprint(dump(obj))

和结果.

{'__type__': '<__main__.stdClass object at 0x2b126000b890>',
 'dict': {'a': 1, 'c': 3, 'b': 2, 'more': {'y': 25, 'z': 26}},
 'int': 1,
 'list': [1, 2, 3, 'a', 'b', 'c', [1, 2, 3, 4]],
 'subObj': {'__type__': '<__main__.stdClass object at 0x2b126000b8d0>',
            'value': 'foobar'},
 'tup': (1, 2, 3, 4)}

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有