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

pxy2qtax  于 2022-11-14  发布在  Python
关注(0)|答案(3)|浏览(135)

在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吗?因为这看起来也有点疯狂。

rdlzhqv9

rdlzhqv91#

你可以用很多不同的方式打印你的对象和Python类,这里有一个简单的方法:

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

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

print LinkedList()

我建议你从熟悉str and repr操作符开始。无论如何,这只是一个小例子,使用python有很多方法可以漂亮地打印对象和类

jgovgodb

jgovgodb2#

我们期望您实现自己的__str__方法,以便选择在诊断中记录的重要内容。
但是,可以使用几行代码以“漂亮”格式记录整个对象字典。例如:

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}
2ekbmq32

2ekbmq323#

为了解释上面的答案,主要是解释str的那个。Pythonrepr()函数返回字符串格式的对象表示。当repr()“str的超类”函数在对象上被调用时,这个方法被调用。如果可能,返回的字符串应该是一个有效的Python表达式,可以用来重新构造对象。
如果您在任何对象中很好地实现此方法,这将使日志增强10倍

相关问题