복붙노트

[PYTHON] 지역 ()을 사용하는 파이썬 사전 이해력은 KeyError를 제공합니다.

PYTHON

지역 ()을 사용하는 파이썬 사전 이해력은 KeyError를 제공합니다.

>>> a = 1
>>> print { key: locals()[key] for key in ["a"] }
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
KeyError: 'a'

이런 식으로 사전을 만들려면 어떻게해야합니까?

해결법

  1. ==============================

    1.딕트 독해에는 고유 한 네임 스페이스가 있으며 해당 네임 스페이스의 locals ()에는. 기술적으로 말하면, 가장 바깥 쪽 iterable (여기에서 [ "a"])에 대한 초기 iterable을 제외한 모든 것은 가장 바깥 쪽 iterable을 인수로하여 중첩 된 함수로 거의 실행됩니다.

    딕트 독해에는 고유 한 네임 스페이스가 있으며 해당 네임 스페이스의 locals ()에는. 기술적으로 말하면, 가장 바깥 쪽 iterable (여기에서 [ "a"])에 대한 초기 iterable을 제외한 모든 것은 가장 바깥 쪽 iterable을 인수로하여 중첩 된 함수로 거의 실행됩니다.

    globals ()를 대신 사용하거나 dict comprehension 외의 locals () 사전에 대한 참조를 만든 경우 코드가 작동합니다.

    l = locals()
    print { key: l[key] for key in ["a"] }
    

    데모:

    >>> a = 1
    >>> l = locals()
    >>> { key: l[key] for key in ["a"] }
    {'a': 1}
    >>> { key: globals()[key] for key in ["a"] }
    {'a': 1}
    
  2. ==============================

    2.대신 globals ()를 사용해보세요.

    대신 globals ()를 사용해보세요.

    print {key : globals()[key] for key in ["a"]}
    

    왜냐하면 a는 dict comprehension의 범위에서 정의되지 않았기 때문입니다 (@MartijnPieters가 말했듯이).

  3. from https://stackoverflow.com/questions/22485399/python-dictionary-comprehension-using-locals-gives-keyerror by cc-by-sa and MIT license