[python 기초] 12 - 의외의 처리와 디버깅

5077 단어
  • 예기치 않은 처리
  • 문법 검사
  • pdb
  • 가져오기 프로그램
  • 의외의 처리
  • 이전 섹션에서는 많은 오류 메시지가 있었습니다
  • .
  • 예:
  • $ ./user_input_int.py
    Enter an integer number: abc
    Traceback (most recent call last):
      File "./user_input_int.py", line 6, in 
        usr_num = int(usr_ip)
    ValueError: invalid literal for int() with base 10: 'abc'
    
  • 이런 예에서 프로그램은 사용자의 오류를 알리고 수정할 기회를 주는 경향이 있다
  • 파이톤은 try-except 구조를 통해 실현
  • #!/usr/bin/python3
    
    while True:
        try:
            usr_num = int(input("Enter an integer number: "))
            break
        except ValueError:
            print("Not an integer, try again")
    
    print("Square of entered number is: {}".format(usr_num * usr_num))
    
  • except는 특정한 오류에 사용할 수 있다(본 예는 ValueError
  • $ ./user_input_exception.py
    Enter an integer number: a
    Not an integer, try again
    Enter an integer number: 1.2
    Not an integer, try again
    Enter an integer number: 3
    Square of entered number is: 9
    

    한층 더 읽다
  • 파이톤 문서 - 오류, 의외 처리 및 의외 처리
  • 파이썬 문서 - 예기치 않은 내장
  • stackoverflow - 의외의 정보 포착
  • stackoverflow - 누드 사고 방지
  • 파이톤 문서 - pass 문장
  • 문법 검사
  • 파이톤 명령줄 옵션은 일련의 목적에 사용할 수 있음
  • 문법 검사가 그중의 하나
  • $ python3 -m py_compile syntax_error.py
      File "syntax_error.py", line 3
        print "Have a nice day"
                              ^
    SyntaxError: Missing parentheses in call to 'print'
    
  • 문법 오류를 신속하게 포착하는 데 if for with 등 부족한 부분:print 문장 부족한 부분()이 매우 유용하다
  • 이 예는 단지 시험일 뿐이지만 실제 세계의 프로그램은 수천 줄에 달할 수 있어 타자 오류를 찾기가 매우 어렵다
  • 파이썬 문서 - cmdline
  • One-liners: #1, #2, #3


  • pdb
  • 디버거 활성화는 cmdline의 또 다른 용법
  • 사용print만능대법에 비해 pdb는 더 많은 디버깅 프로그램의 기능 특성을 가지고 단점
  • 을 설정할 수 있다.
    $ python3 -m pdb if_elif_else.py
    > /home/learnbyexample/python_programs/if_elif_else.py(3)()
    -> num = 45
    (Pdb) p num
    *** NameError: name 'num' is not defined
    (Pdb) n
    > /home/learnbyexample/python_programs/if_elif_else.py(6)()
    -> if num > 25:
    (Pdb) p num
    45
    (Pdb) l
      1     #!/usr/bin/python3
      2
      3     num = 45
      4
      5     # only if
      6  -> if num > 25:
      7         print("Hurray! {} is greater than 25".format(num))
      8
      9     # if-else
     10     if num % 2 == 0:
     11         print("{} is an even number".format(num))
    (Pdb) q
    
  • l 디버거가 있는 줄 문장의 코드를 인쇄하여 디버그의 진전을 시각화하는 데 사용
  • s 현재 줄을 실행하고 함수 호출에 들어갑니다
  • n 현재 줄을 실행하고 함수 호출을 단일 실행 절차로 간주
  • c 계속 실행하고 다음 단점 알아
  • p variable 인쇄 변수 값
  • h 명령 목록
  • h c 수령c 명령 도움말
  • q 디버거 종료
  • 한층 더 읽다
  • 파이썬 문서 - pdb
  • pdb 튜토리얼
  • 일반 런타임 오류
  • 일반 초보자 오류 그래프
  • 일반 트랩
  • 파이썬 문서 - 기본 로그 자습서
  • 가져오기 도구
  • 해석기 테스트 기능import에 프로그램을 직접 가져올 수 있음
  • if __name__ == "__main__": 구축
  • 내부 코드는 프로그램이 실행할 때 타임 블록을 실행하도록 한다. 예를 들어 명령줄에서 프로그램을 실행한다
  • 내부 코드는 프로그램이 모듈로 도입될 때 시대 코드 블록이 실행되지 않는다. 예를 들어 프로그램의 함수를 사용한다
  • 모든 코드를 main 함수 내부에 넣고 if __name__ == "__main__": 구조에서 호출main()
  • 주의__name____main__ 접두어와 접두어는 모두 두 개의 밑줄
  • 이다
    #!/usr/bin/python3
    
    # -----         -----
    def greeting():
        print("-----------------------------")
        print("         Hello World         ")
        print("-----------------------------")
    
    # -----        -----
    def sum_two_numbers(num1, num2):
        sum = num1 + num2
        print("{} + {} = {}".format(num1, num2, sum))
    
    # -----         -----
    def num_square(num):
        return num * num
    
    # ----- main -----
    def main():
        greeting()
        sum_two_numbers(3, 4)
    
        my_num = 3
        print(num_square(2))
        print(num_square(my_num))
    
    if __name__ == "__main__":
        main()
    
  • 프로그램으로 실행할 때
  • $ ./functions_main.py
    -----------------------------
             Hello World
    -----------------------------
    3 + 4 = 7
    4
    9
    
  • 가져올 때
  • >>> import functions_main
    
    >>> functions_main.greeting()
    -----------------------------
             Hello World
    -----------------------------
    
    >>> functions_main.num_square()
    Traceback (most recent call last):
      File "", line 1, in 
    TypeError: num_square() missing 1 required positional argument: 'num'
    
    >>> functions_main.num_square(5)
    25
    
    >>> functions_main.main()
    -----------------------------
             Hello World
    -----------------------------
    3 + 4 = 7
    4
    9
    

    한층 더 읽다
  • 파이썬 문서 -main__
  • if __name__ == "__main__"무슨 뜻이에요?
  • 파이톤 패키지 가이드
  • diveintopython3 - 포장
  • 좋은 웹페이지 즐겨찾기