Beim Debuggen in PHP finde ich es oft nützlich, einfach eine var_dump() in meinem Code, um mir zu zeigen, was eine Variable ist, was ihr Wert ist und was sie enthält.
Was ist ein gutes Python Äquivalent für diese?
Beim Debuggen in PHP finde ich es oft nützlich, einfach eine var_dump() in meinem Code, um mir zu zeigen, was eine Variable ist, was ihr Wert ist und was sie enthält.
Was ist ein gutes Python Äquivalent für diese?
Ich habe also die Antworten aus dieser Frage genommen und weitere Frage und kam unten an. Ich vermute, dass dies für die meisten Leute nicht pythonisch genug ist, aber ich wollte wirklich etwas, das mir eine tiefe Darstellung der Werte einer unbekannten Variablen ermöglicht. Ich würde mich über Vorschläge freuen, wie ich dies verbessern oder das gleiche Verhalten einfacher erreichen kann.
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
Hier ist die Verwendung
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))
und die Ergebnisse.
{'__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)}
Ein altes Thema, aber einen Versuch wert.
Hier ist eine einfache und effiziente var_dump
Funktion:
def var_dump(var, prefix=''):
"""
You know you're a php developer when the first thing you ask for
when learning a new language is 'Where's var_dump?????'
"""
my_type = '[' + var.__class__.__name__ + '(' + str(len(var)) + ')]:'
print(prefix, my_type, sep='')
prefix += ' '
for i in var:
if type(i) in (list, tuple, dict, set):
var_dump(i, prefix)
else:
if isinstance(var, dict):
print(prefix, i, ': (', var[i].__class__.__name__, ') ', var[i], sep='')
else:
print(prefix, '(', i.__class__.__name__, ') ', i, sep='')
Beispielhafte Ausgabe:
>>> var_dump(zen)
[list(9)]:
(str) hello
(int) 3
(int) 43
(int) 2
(str) goodbye
[list(3)]:
(str) hey
(str) oh
[tuple(3)]:
(str) jij
(str) llll
(str) iojfi
(str) call
(str) me
[list(7)]:
(str) coucou
[dict(2)]:
oKey: (str) oValue
key: (str) value
(str) this
[list(4)]:
(str) a
(str) new
(str) nested
(str) list
Ich habe keine PHP-Erfahrung, aber ich habe ein Verständnis für die Python-Standardbibliothek.
Für Ihre Zwecke gibt es in Python mehrere Methoden:
Protokollierung Modul;
Das Modul zur Serialisierung von Objekten heißt Essiggurke . Sie können Ihren eigenen Wrapper für das Pickle-Modul schreiben.
Wenn Sie die var_dump
zum Testen, hat Python seine eigene Doktortest y unittest Module. Es ist sehr einfach und schnell zu gestalten.
Ich verwende die selbst geschriebene Printer-Klasse, aber dir() ist auch gut für die Ausgabe der Instanzfelder/-werte.
class Printer:
def __init__ (self, PrintableClass):
for name in dir(PrintableClass):
value = getattr(PrintableClass,name)
if '_' not in str(name).join(str(value)):
print ' .%s: %r' % (name, value)
Das Beispiel der Verwendung:
Printer(MyClass)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.