Pycharm 관리자가 "d = {}"에 대해 불평하는 이유는 무엇입니까?


196

d = {}Pycharm의 코드 관리자 로 사전을 초기화하면 경고가 발생합니다.

이 사전 작성은 사전 리터럴로 다시 작성 될 수 있습니다.

다시 쓰면 d = dict()경고가 사라집니다. 때문에 {}이미 입니다 사전 문자 그대로, 나는 확실히 메시지가 잘못된 꽤 있어요. 또한, 모두 보인다 d = {}d = dict()유효하고 파이썬 있습니다.

이 관련 질문은 선택이 스타일 / 선호의 문제 일 뿐이라는 결론을 내린 것 같습니다. "d = dict ()"와 "d = {}"의 차이점

Pycharm이 왜 불평 d = {}할까요?

최신 정보:

맥은 못을 박았다. 경고는 실제로 플래그 된 것이 아니라 여러 줄에 적용되었습니다.

Pycharm은 사전을 초기화 한 다음 사전에서 값을 설정하는 일련의 연속 명령문을 찾는 것 같습니다. 예를 들어 경고가 트리거됩니다.

d = {}
d['a'] = 1

그러나이 코드는 :

d = {}
pass
d['a'] = 1

2
너무 시끄러운하고, 실제 성능 향상, 그냥 한 번 더 불필요한 검사가 없다
dashesy

리스트에서도 마찬가지입니다 : a = [1]; a.append (2), 아마 a = [1, 2]가 더 좋기 때문에 ....
cleros

예. 성가신 메시지. PyCharm의 모든 밑줄은 프로그램을 실행하기 전에 하나를 불편하게 만듭니다.
Rajkumar R

나는 JetBrains의 YouTrack에서 유사한 문제 발견 - youtrack.jetbrains.com/issue/PY-19269#u=1461253420326 과는 말한다 :이 경우 PyCharm 당신이에 대한 값 제공 할 수 있다는 제안 something 을 할당하는 문자 대신 DICT에 속성 권리를 다음 줄에서.
Dudnikof

답변:


245

사전 선언에 대한 다음 코드는 무엇입니까?

pycharm이 다음과 같은 경우 오류를 트리거한다고 생각합니다.

dic = {}
dic['aaa'] = 5

당신이 쓸 수 있듯이

dic = {'aaa': 5}

BTW : 함수를 사용하면 오류가 사라진다고해서 pycharm dict()이 문자 그대로 라고 생각할 필요는 없습니다 . 그것은 다음에 대해 불평하지 않는다는 것을 의미 할 수 있습니다.

dic = dict()
dic['aaa'] = 5

HTH!


6
불행히도 내 동료 중 일부는이 기능을 사용하지 않는 모든 소음이 많은 검사를 위해 완전히 꺼졌습니다 .PEP, ..., 실제 문제 및 실제 성능 힌트와 같은 많은 것들에 유용하기 때문에 부끄러운 일입니다.
dashesy

필자의 경우 재 작성 유형이 불가능합니다. 생성되는 각 사전 항목 (첫 번째 항목)은 이전에 생성 된 사전 항목에 따라 달라지기 때문입니다. 따라서 동시에 모든 항목이 아닌 하나씩 사전에 할당되어야합니다. 그러나 PyCharm은 여전히 ​​불평하고 사전을 사전 리터럴로 만들어야한다고 말합니다. dic = dict()해결 방법 을 사용해야한다고 생각합니다 .
HelloGoodbye

@HelloGoodbye - 당신은 내가 자격이 의견을 표명 할 수 없습니다 해결하려고하는 문제를 알고 있지만 시작으로 간주 한없이 d = { 'aaa': f1(something) }다음 d = f2(d)다음 d = f3(d)교대 등 ... 또는 d['bbb'] = f2(d), d['ccc'] = f3(d)...?
Mac

내가 가진 건설은 d = {}, d['a'] = A, d['b'] = f(d['a']), d['c'] = f(d['b'])
HelloGoodbye

5
@HelloGoodbye-그렇다면 처음 두 개를 병합 d = {'a': A}한 다음 설명대로 시퀀스를 유지하십시오.
mac

16

프로젝트 설정 또는 기본 설정에서 비활성화 할 수 있습니다.

  • 설정-> 검사-> Python으로 이동하십시오.
  • "사전 작성을 사전 리터럴로 다시 작성할 수 있습니다"를 선택 취소하십시오.

이것이 내가 한 일이며 제대로 작동하는지 확인할 수 있습니다. 내 코드는 payload = {** BASEPAYLOAD, ** ExtraPayload}로 두 개의 사전을 병합하여 오류가 발생했습니다.
pa1983

9

한 번의 조작으로 사전을 초기화하는 것을 좋아하는 사람들을 위해

d = {
  'a': 12,
  'b': 'foo',
  'c': 'bar'
}

같은 많은 줄 대신

d = dict()
d['a'] = 12
d['b'] = ....

결국 나는 이것으로 끝났다.

d = dict()
d.update({
  'a': 12,
  'b': 'foo',
  'c': 'bar'
})

Pycharm은 이것에 대해 불평하지 않습니다


7
나는 울었다. :( 그래서 실제로 사용하는 편집기에서 경고를 제거하기 위해 코드의 양을 늘리고 명확하지 않고 느리게 실행했습니다 ... 나는 pycharm을 사용하지 않지만 일부는 있다고 가정합니다. 경고를 비활성화하고 pythonic 방식으로 코딩을 계속할 수있는 일종의 구성 토글. :)
mac

2
@mac 지금 동의합니다. 나는 젊고 멍청했습니다) 그 이후로 나는 조금 변경하고 경고를 비활성화했습니다.
Igor.K

롤! 이것은 내가받은 가장 기억에 남는 시간 상쇄 의견이어야합니다! ;)
mac

0
mydict = {
  a: 5,
  b:z+c/2
}

사전을 먼저 초기화 한 다음 새 값을 다시 할당하지 않고 사전을 직접 작성할 수 있습니다.


0

나는이 경고가 지옥에서 나 빠지고있는 상황입니다. 필자의 경우, dict을 부분적으로 리터럴로 채우고 부분적으로 튜플 출력에서 ​​함수로 채우고 있습니다.

def get_other_values():
    return 3, 4

foo = {
    "a": 1,
    "b": 2
}
foo["c"], foo["d"] = get_other_values()

따라서 get_other_values ​​출력에 대한 임시 변수를 작성하지 않으면 리터럴을 사용하여 dict를 작성하더라도 PEP8에서이 경고를 생성합니다. 그리고 값이 튜플로 출력되므로 리터럴에 c 및 d 키를 할당 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.