大多数人如何在Python中进行console.log调试?

时间:2016-08-27 21:13:05

标签: python class debugging object tostring

在Node.js中,当我想快速检查某些内容的值而不是破坏调试器并单步执行时,我会快速添加一个console.log(foo)并获得一个漂亮的:

{
   lemmons: "pie",
   number: 9,
   fetch: function(){..}
   elements: {
      fire: 99.9
   }
}

很清楚!在Python中我得到了这个:

class LinkedList:
  head = None
  tail = None
  lemmons = 99

<__main__.LinkedList instance at 0x105989f80> 或者使用vars()

{}

dir()

['_LinkedList__Node', '__doc__', '__module__', 'append', 'get_tail', 'head', 'lemmons', 'remove', 'tail']

呸!看看那些废话 - 我认为python应该是快速,漂亮和干净的吗?这真的是人们这样做的吗?他们是否为所有内容实施客户 str 和自定义 repr ?因为那似乎也有点疯狂..

2 个答案:

答案 0 :(得分:0)

您可以打印您的物品和Python类有很多不同的方式,这里只是一个简单的方法:

class LinkedList:
    head = None
    tail = None
    lemmons = 99

    def __str__(self):
        return str(vars(LinkedList))

print LinkedList()

我建议您开始熟悉str and repr运营商。在任何情况下,这都是一个小例子,使用python,有很多方法可以打印漂亮的物体。类

答案 1 :(得分:0)

期望您implement your own __str__ method,以便您可以选择登录您的诊断的重要内容。

但是,可以选择将整个对象字典记录在&#34;漂亮的&#34;格式使用几行代码。例如:

from pprint import pformat

class A(object):
    def __init__(self):
        self.foo = 1
        self.bar = {"hello": "world"}
        self._private = 0

a = A()
print pformat(vars(a))
# You can also pass pformat to your logger if that's what you have.

这将返回类似这样的内容(取决于您拥有的数据量和width约束条件):

{'_private': 0,
 'bar': {'hello': 'world'},
 'foo': 1}