나는 그 당시의 상황을 추적하는 데 거의 한 시간을 소비했습니다. 매우 혼란스러운 오류 메시지입니다.오염 된 네임 스페이스에 물린 것을 피하십시오.
fspec_prsrs = tuple(compile('{{{}{}}}'.format(fstr_tup.field_name
if fstr_tup.field_name else '',
':'+fstr_tup.format_spec
if fstr_tup.format_spec else ''
)
)
for fstr_tup in fstr_tuples)
이 오류가 발생했습니다 :
*** TypeError: Required argument 'filename' (pos 2) not found
오류의 소스는 코드 블록 (이 질문의 목적을 위해, 모든 조각의 의미는별로 중요하지 않습니다)이었다
오류의 원인은 내가 파일 parse
module에서 (위로) compile
함수의 가져 오기를 무시한 것입니다.
결과적으로 compile
은 built-in compile
function을 나타냅니다. 오류 메시지가 원인을 이해하고 나에게 매우 명확하게 보일지라도, 나는 이이라고 생각한 패키지 소스 코드를보고 많은 시간을 낭비하는 결과를 보았습니다. 오류가 거기에서 왔다고 생각했습니다. 대신 내장 된 compile
에서 온 것입니다.
compile
기능은 잊어 버리는 경향이 있습니다. 만약에 이제까지 내가 좀처럼 그것을 사용하지 않으며, 실제로 나는 또한 사용하지 않습니다 단지 compile
같은 내장 된 목록에서 기능의 수 (나는 당신, id
찾고 있어요이 있고, 당신, filter!), 결과적으로 그들은 내 네임 스페이스를 오염시키는 것 외에는 아무 것도하지 않고 앉아 있습니다.
일반적으로 가져 오기를 잊어 버리면 NameError
이 표시되며 그 원인은 분명합니다. 네임 스페이스에 숨어있는 것들이있을 때 거기에 넣지 않은 것은 훨씬 덜 분명합니다. 이런 문제를 피할 수있는 완전한 방법이 있습니까?
수행 할 수있는 작업은 무엇입니까? 아니면 모든 파이썬 코더가 함께 배우기 만하면되는 무언가입니까?
아마도 내장 된 이름을 강조 표시하는 IDE를 사용하고 있을까요? 그렇게하면 코드가 기본 제공 이름을 참조하는지 여부가 명확 해집니다. Pycharm이 이것을합니다. 뿐만 아니라 숭고한. –
@ChristianDean 내가 가진 솔루션이 나에게는 분명하지 않다는 것을 IDE를 정기적으로 사용 해본 적이 없기 때문에, 사람들이 가지고있는 것이 분명하다고 확신 할지라도. 나는 일반적으로 "나는 IDE가 필요 없다"라고 말했지만 (나는 단지 메모장 ++을 사용한다.) 나는 오늘 내가 내가 그걸 증명했다고 생각한다. –