2013-01-19 7 views
6

Mam problemy ze skryptami mostu dla pytonadruk Python atrybutów bez __dict__

Próbuję listy atrybutów obiektu iTunes

iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes") 

wykorzystaniem

>>> from pprint import pprint 
>>> from Foundation import * 
>>> from ScriptingBridge import * 
>>> iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes") 
>>> pprint (vars(iTunes)) 

otrzymuję wstecz

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: vars() argument must have __dict__ attribute 

ktoś wie, jak sobie z tym poradzić?

Odpowiedz

5

Wypróbuj dir(iTunes). Jest podobny do vars, ale bardziej bezpośrednio z obiektami.

+0

tak to działa –

+0

@AshleyHughes to działa w tym sensie, że nie jest wyjątek, ale t faktycznie nie podaje wszystkiego, co jest dostępne w tych dziwnych opakowaniach. Na przykład nie ma "applicationWithBundleIdentifier_" w 'dir (SBApplication)'. – mmgp

+0

Po prostu chciałem zobaczyć, jakie informacje mogę zobaczyć IE to coś grającego, co nie obsługuje, ale trackName zwraca None, więc używam tych metod klasy –

1

To przychodzi dość późno, ale dla innego problemu (ale ten sam błąd), następujące pracował dla mnie:

json.dumps(your_variable) 

Upewnij się, że importowane JSON w skrypcie wcześniej.

import json 

Będziesz musiał znaleźć sposób, aby przeczytać JSON w czystym formacie.

+0

nie będzie działać dla wielu obiektów, takich jak obiekt plików Pythona. pojawia się błąd '' '>>> json.dumps (f) Traceback (ostatnie ostatnie połączenie): Plik" ", wiersz 1, w TypeError: nie jest serializowany przez JSON'''' –

1

czegoś podobnego do Vars (obj), gdy obj nie jest dostępny jako dict, używam kludge takiego:

>>> obj = open('/tmp/test.tmp') 
>>> print vars(obj) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: vars() argument must have __dict__ attribute 
>>> print dict([attr, getattr(obj, attr)] for attr in dir(obj) if not attr.startswith('_')) 

{'softspace': 0, 'encoding': None, 'flush': <built-in method flush of file object at 0xf7472b20>, 'readlines': <built-in method readlines of file object at 0xf7472b20>, 'xreadlines': <built-in method xreadlines of file object at 0xf7472b20>, 'close': <built-in method close of file object at 0xf7472b20>, 'seek': <built-in method seek of file object at 0xf7472b20>, 'newlines': None, 'errors': None, 'readinto': <built-in method readinto of file object at 0xf7472b20>, 'next': <method-wrapper 'next' of file object at 0xf7472b20>, 'write': <built-in method write of file object at 0xf7472b20>, 'closed': False, 'tell': <built-in method tell of file object at 0xf7472b20>, 'isatty': <built-in method isatty of file object at 0xf7472b20>, 'truncate': <built-in method truncate of file object at 0xf7472b20>, 'read': <built-in method read of file object at 0xf7472b20>, 'readline': <built-in method readline of file object at 0xf7472b20>, 'fileno': <built-in method fileno of file object at 0xf7472b20>, 'writelines': <built-in method writelines of file object at 0xf7472b20>, 'name': '/tmp/test.tmp', 'mode': 'r'}

Jestem pewien, że można to poprawić , takich jak odfiltrować funkcje z if not callable(getattr(obj, attr):

>>> print dict([attr, getattr(obj, attr)] for attr in dir(obj) if not attr.startswith('_') and not callable(getattr(obj, attr))) 
{'errors': None, 'name': '/tmp/test.tmp', 'encoding': None, 'softspace': 0, 'mode': 'r', 'closed': False, 'newlines': None} 
Powiązane problemy