파이썬에서 부작용을 디버그하는 효과적인 방법이 있습니까?효과적으로 파이썬에서 부작용을 디버그하는 방법은 무엇입니까?
예를 들어, list (또는 임의의 다른 가변 객체)가 함수의 인수로 전달되었습니다.
>>> some_list = [1,2]
>>> some_function_with_huge_call_tree(some_list)
>>> print some_list
[2,1]
어떻게 프로그램에서 목록이 되돌려 졌는지 판단하는 방법은 무엇입니까? 클래스 인스턴스의 멤버
>>> print obj.x
foo
>>> some_function_with_super_huge_call_tree(obj)
>>> print obj.x
bar
을 변경되었습니다
하나 더 예를 들어, 클래스의 인스턴스가 인수로 전달?
pdb.break_on_change(some_list) # case 1
pdb.break_on_change(obj.x) # case 2
는 불행하게도, PDB 그런 기능이 없습니다 : 두 경우 모두
내가 이런 식으로 뭔가를 할 수 있습니다.
즉, 모든 경우에 공통된 해결책을 찾으려고합니다.
변형 된 개체를 제어합니까? 함수를 아는 경우에는 예외를 throw하고 스택 추적을 검사 할 수 있습니다. – 5gon12eder
목록의 경우, 튜플을주고 실패한 부분을 볼 수 있을까요? 보다 일반적으로, 쓰기 가능한 객체를 동일한 읽기 전용 객체로 바꾸십시오. – NPE
좋아, 목록 나쁜 예입니다. 인수가 dict (또는 임의의 다른 가변 유형)이면? 모든 경우에 대한 일반적인 해결책을 찾으려고 노력합니다. – Pyt