그래서 내가 찾고있는 것은 PHP의 print_r 함수 와 같은 것 입니다.
이것은 해당 객체의 상태를 확인하여 스크립트를 디버깅 할 수 있도록합니다.
답변
당신은 정말로 두 가지 다른 것을 섞고 있습니다.
사용 dir()
, vars()
또는 inspect
(내가 사용하는 모듈에 관심이 무엇을 얻기 위해 __builtins__
, 당신은 대신 모든 개체를 사용할 수있는 예로서).
>>> l = dir(__builtins__)
>>> d = __builtins__.__dict__
당신이 좋아하는 멋진 사전을 인쇄하십시오 :
>>> print l
['ArithmeticError', 'AssertionError', 'AttributeError',...
또는
>>> from pprint import pprint
>>> pprint(l)
['ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'DeprecationWarning',
...
>>> pprint(d, indent=2)
{ 'ArithmeticError': <type 'exceptions.ArithmeticError'>,
'AssertionError': <type 'exceptions.AssertionError'>,
'AttributeError': <type 'exceptions.AttributeError'>,
...
'_': [ 'ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'DeprecationWarning',
...
대화 형 디버거에서 명령으로 예쁜 인쇄를 사용할 수도 있습니다.
(Pdb) pp vars()
{'__builtins__': {'ArithmeticError': <type 'exceptions.ArithmeticError'>,
'AssertionError': <type 'exceptions.AssertionError'>,
'AttributeError': <type 'exceptions.AttributeError'>,
'BaseException': <type 'exceptions.BaseException'>,
'BufferError': <type 'exceptions.BufferError'>,
...
'zip': <built-in function zip>},
'__file__': 'pass.py',
'__name__': '__main__'}
답변
당신은 다음과 vars()
혼합 되기를 원합니다 pprint()
:
from pprint import pprint
pprint(vars(your_object))
답변
def dump(obj):
for attr in dir(obj):
print("obj.%s = %r" % (attr, getattr(obj, attr)))
예외 처리, 국가 / 특수 문자 인쇄, 중첩 된 객체로의 반복 등의 기능을 작성자의 선호도에 따라 추가하는 많은 타사 기능이 있습니다. 그러나 그들은 기본적으로 이것으로 귀결됩니다.
답변
dir 이 언급되었지만 속성 이름 만 제공합니다. 그들의 가치를 원한다면 __dict__를 시도하십시오.
class O:
def __init__ (self):
self.value = 3
o = O()
출력은 다음과 같습니다.
>>> o.__dict__
{'value': 3}
답변
“dir ()”함수를 사용하여이를 수행 할 수 있습니다.
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdo
t__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder
, 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info'
'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefault
ncoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'he
version', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_
ache', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit
, 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoption
', 'winver']
>>>
또 다른 유용한 기능은 도움입니다.
>>> help(sys)
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
Dynamic objects:
argv -- command line arguments; argv[0] is the script pathname if known
답변
객체의 현재 상태를 인쇄하려면 다음을 수행하십시오.
>>> obj # in an interpreter
또는
print repr(obj) # in a script
또는
print obj
클래스 정의 __str__
또는 __repr__
메소드. 로부터 파이썬 문서 :
__repr__(self)
repr()
내장 함수와 문자열 변환 (역 따옴표)에 의해 호출되어 객체의 “공식적인”문자열 표현을 계산합니다. 가능한 경우 이것은 동일한 값을 가진 객체를 다시 만드는 데 사용할 수있는 유효한 Python 표현식처럼 보일 것입니다 (적절한 환경이 제공됨). 이것이 가능하지 않으면 “<… some useful description …>”형식의 문자열이 반환되어야합니다. 반환 값은 문자열 객체 여야합니다. 클래스가 정의 경우 에 repr ()하지만__str__()
, 그__repr__()
클래스의 인스턴스의 “비공식”문자열 표현이 필요한 경우에도 사용됩니다. 일반적으로 디버깅에 사용되므로 표현이 풍부하고 모호하지 않은 표현이 중요합니다.
__str__(self)
str()
내장 함수와 print 문에 의해 호출되어 객체의 “비공식”문자열 표현을 계산합니다. 이것은__repr__()
유효한 파이썬 표현식 일 필요는 없다는 점과 다릅니다 . 대신에보다 편리하거나 간결한 표현이 사용될 수 있습니다. 반환 값은 문자열 객체 여야합니다.
답변
체크 아웃 할 가치가있을 수 있습니다.
Perl의 Data :: Dumper에 해당하는 Python이 있습니까?
내 추천은 이것입니다-
https://gist.github.com/1071857
perl은 객체 데이터를 다시 perl 소스 코드로 변환하는 Data :: Dumper라는 모듈을 가지고 있습니다 (NB : 코드를 다시 소스로 변환하지 않으며 거의 항상 출력에서 객체 메소드 함수를 원하지 않습니다). 이것은 지속성을 위해 사용될 수 있지만 일반적인 목적은 디버깅입니다.
표준 python pprint가 달성하지 못하는 많은 것들이 있습니다. 특히 객체의 인스턴스를 볼 때 내림차순으로 멈추고 객체의 내부 16 진수 포인터를 제공합니다 (오류, 포인터는별로 사용되지 않습니다) 방법). 간단히 말해, 파이썬은이 위대한 객체 지향 패러다임에 관한 것입니다.
perl Data :: Dumper를 사용하면 원하는 깊이를 제어 할 수 있으며 순환 연결된 구조도 감지 할 수 있습니다 (정말 중요 함). 이 과정은 기본적으로 펄에서 달성하기가 더 쉽습니다. 왜냐하면 객체는 축복을 넘어서는 특별한 마법이 없기 때문입니다 (일반적으로 잘 정의 된 과정).