2014-11-06 2 views
1

저는 Python을 처음 사용하여 코드 조각에 조금 어려움을 겪고 있습니다. 나는 Rundeck API를위한 오픈 소스 파이썬 클라이언트 인 rundeckrun을 사용하고있다. 클라이언트에는 python 2.7+에 고정되어있는 것으로 보이는 코드가 하나 있는데 Python 2.6에서 작동하도록해야합니다. 나는 검색을 시도했지만 실제로이 구조체가 2.6이라는 것을 찾기가 너무 어려워서 무엇인지 모릅니다.rundeckrun 용 Python 2.6 호환성

node_attr_keys = (
     'name', 
     'hostname', 
     'username', 
     'description', 
     'osArch', 
     'osFamily', 
     'osName', 
     'editUrl', 
     'remoteUrl', 
    ) 

    data = {k: getattr(self, k) 
      for k in node_attr_keys if getattr(self, k, None) is not None} 

특정 오류는 다음과 같습니다

파일 "/usr/lib/python2.6/site-packages/rundeckrun-0.1.11-py2.6.egg/rundeck/client.py" line 21, 에서 .api import RundeckApiTolerant, RundeckApi, RundeckNode 파일 "/usr/lib/python2.6/site-packages/rundeckrun-0.1.11-py2.6.egg/rundeck/api.py", 줄 node_attr_keys K에 대한 135 getattr는 (자체가, K는 없음) 없음}^ 구문 에러없는없는 경우 잘못된 구문

+0

[파이썬 2.7 이전의 사전 형식으로 대체하는 방법] 중복 가능 (http://stackoverflow.com/questions/21069668/alternative-to-dict-comprehension-prior-to-python-2-7) –

+0

^"사전 이해력"이라고 불린다. 희망이 다른 질문이 도움이됩니다. –

+0

빠른 답장을 보내 주셔서 감사합니다! – moshjeier

답변

1

케빈 (Kevin)이 지적한 것처럼, 이것은 사전 이해력입니다.

파이썬 2.6에서

, 당신은 튜플 (키/값 쌍)의 목록을 산출 발전기 식으로 작성하고 dict 생성자에 그것을 전달할 수 있습니다 :이 외에도 오류에서

data = dict((k, getattr(self, k)) 
      for k in node_attr_keys if getattr(self, k, None) is not None) 
1
이다

사전 이해력. Python 2.6에서는 지원되지 않습니다. 제공하신 코드는 대략 다음 코드와 같습니다 :

node_attr_keys = (
# Same as your code, omitted for brevity 
) 
data = {} 
for k in node_attr_keys: 
    if getattr(self, k, None) is not None: 
     data[k] = getattr(self, k) 
0

, 사람들은 얻을 수 있습니다 같은 이유로 인해 다음과 같은 오류가 발생합니다.

File "/usr/lib/python2.6/site-packages/rundeck/transforms.py", line 256 
_transforms = {obj_key: obj_val for obj_key, obj_val in locals().items() if hasattr(obj_val, '__is_transform__')} 
           ^

구문 에러 : 유효하지 않은 구문

File "/usr/lib/python2.6/site-packages/rundeck/util.py", line 22 
return {c.tag: c.text for c in el} 
         ^

구문 에러 : 유효하지 않은 구문

File "/usr/lib/python2.6/site-packages/rundeck/util.py", line 36 
return {k: v for k, v in el.items()} 
      ^

구문 에러 : 유효하지 않은 구문

File "/usr/lib/python2.6/site-packages/rundeck/util.py", line 58 
return {k: kwargs.pop(k) for k in api_keys if k in kwargs} 

당신은 kindall 같은 수정 프로그램을 적용해야 할 수도 있습니다 줬어. 다음과 같이 파일을 수정하십시오.

_transforms = dict((obj_key, obj_val) for obj_key, obj_val in locals().items() if hasattr(obj_val, '__is_transform__')) 
return dict((c.tag, c.text) for c in el) 
return dict((k, v) for k, v in el.items()) 
return dict((k, kwargs.pop(k)) for k in api_keys if k in kwargs) 

신용은 친절합니다.