파이썬에서 예외를 처리하는 자습서를 자세히 설명합니다.

7224 단어
무엇이 이상입니까?
이상은 하나의 사건으로 그 중의 한 프로그램이 프로그램의 지령의 정상적인 흐름을 파괴하는 과정에서 발생한다.일반적인 경우, 파이톤 스크립트가 처리할 수 없는 상황이 발생하면 이상을 던집니다.이상은 오류를 나타내는 Python 대상입니다.
Python 스크립트에서 이상을 던지면 이상을 처리해야 합니다. 그렇지 않으면 즉시 종료됩니다.예외 처리:
만약 이상을 일으킬 수 있는 의심스러운 코드가 있다면, 의심스러운 코드를try 블록에 저장할 수 있습니다. 프로그램을 지키는 것입니다.try 블록은 다음과 같은 상황을 포함합니다 except: 문장, 그 다음은 코드, 우아한 처리 문제로 가능한 한 블록입니다.구문
여기는 try...except...else 블록에 대한 간단한 구문:

try:
  You do your operations here;
  ......................
except ExceptionI:
  If there is ExceptionI, then execute this block.
except ExceptionII:
  If there is ExceptionII, then execute this block.
  ......................
else:
  If there is no exception then execute this block. 


여기에는 다음과 같은 몇 가지 문법 요점이 있습니다.
4
  • 단일try문장에는 여러 개의 다른 문장이 있을 수 있다.try 블록에 서로 다른 유형의 이상 문장을 포함할 수 있다면 매우 유용하다

  • 4
  • 모든 이상을 처리하는 데 사용되는 일반적인 except 자구를 제공할 수도 있다

  • 4
  • except 자구 이후에는 다른 자구를 포함할 수 있습니다.블록이 이상을 일으키지 않았습니다:try의 코드가 실행되면 다른 블록의 코드입니다

  • 4
  • else 블록에는try: 블록의 코드 보호가 필요하지 않습니다

  • 예.
    다음은 파일을 열고 컨텐트에 기록된 파일을 정상 파일로 이동하는 간단한 예입니다.
    
    #!/usr/bin/python
    
    try:
      fh = open("testfile", "w")
      fh.write("This is my test file for exception handling!!")
    except IOError:
      print "Error: can\'t find file or read data"
    else:
      print "Written content in the file successfully"
      fh.close()
    
    

    이렇게 하면 다음과 같은 결과가 발생합니다.
    
    Written content in the file successfully
    
    

    예:
    여기에는 권한이 없는 파일을 열고 내용을 쓰려고 하기 때문에 이상이 발생할 수 있는 더 간단한 예가 있습니다.
    
    #!/usr/bin/python
    
    try:
      fh = open("testfile", "r")
      fh.write("This is my test file for exception handling!!")
    except IOError:
      print "Error: can\'t find file or read data"
    else:
      print "Written content in the file successfully"
    
    

    이렇게 하면 다음과 같은 결과가 발생합니다.
    
    Error: can't find file or read data
    
    

    except 자문에서 예외 없음:
    다른 정의를 사용하여 다음과 같은 예외 없는 선언을 사용할 수도 있습니다.
    
    try:
      You do your operations here;
      ......................
    except:
      If there is any exception, then execute this block.
      ......................
    else:
      If there is no exception then execute this block. 
    
    

    try-except 문장은 모든 이상을 포착합니다.이런try-except 성명을 사용하는 것은 좋은 프로그래밍 습관으로 여겨지지 않지만, 모든 이상을 포착하기 때문에 프로그래머가 발생할 수 있는 문제의 근본 원인을 찾아내지 못할 것이다.except 자문에서 여러 예외가 발생했습니다.
    다음과 같이 동일한 제문을 사용하여 여러 예외를 처리할 수도 있습니다.
    
    try:
      You do your operations here;
      ......................
    except(Exception1[, Exception2[,...ExceptionN]]]):
      If there is any exception from the given exception list, 
      then execute this block.
      ......................
    else:
      If there is no exception then execute this block. 
    
    

    try-finally 문:
    finally: 블록을 try: 블록과 연결할 수 있습니다.try 블록에 이상이 생겼는지, 코드가 없는지finally 블록은 실행해야 하는 블록입니다.try-finally 문장의 문법은 다음과 같습니다.
    
    try:
      You do your operations here;
      ......................
      Due to any exception, this may be skipped.
    finally:
      This would always be executed.
      ......................
    
    

    except 자구나finally 자구를 제공할 수 있지만 동시에 사용할 수 없습니다.else 자구와finally 자구를 동시에 사용할 수 없습니다.예:
    
    #!/usr/bin/python
    
    try:
      fh = open("testfile", "w")
      fh.write("This is my test file for exception handling!!")
    finally:
      print "Error: can\'t find file or read data"
    
    

    권한이 없으면 파일을 쓰기 방식으로 열면 다음과 같은 결과가 발생합니다.
    
    Error: can't find file or read data
    
    

    같은 예는 다음과 같이 더 간결하게 쓸 수 있다.
    
    #!/usr/bin/python
    
    try:
      fh = open("testfile", "w")
      try:
       fh.write("This is my test file for exception handling!!")
      finally:
       print "Going to close the file"
       fh.close()
    except IOError:
      print "Error: can\'t find file or read data"
    
    

    이상이 try 블록에 던져지면finally 블록으로 즉시 전달됩니다.finally 블록의 모든 문장을 실행합니다. 이 이상은 다시 던져지고, 처리된 except 문장은try-except 문장에 더 높은 층에 나타납니다.Exception 매개변수:
    이상은 하나의 매개 변수가 있고, 매개 변수는 하나의 값이며, 이 문제에 대한 다른 정보를 제공합니다.매개 변수는 이상 내용에 따라 변경됩니다.다음과 같이 다른 자문에서 예외 매개변수를 캡처하는 변수를 제공할 수 있습니다.
    
    try:
      You do your operations here;
      ......................
    except ExceptionType, Argument:
      You can print value of Argument here...
    
    

    이상을 처리하기 위해 코드를 작성하고 있다면, 이상한 이름에 따라 변수가 다른 성명에 있을 수 있습니다.만약 여러 개의 이상을 포착한다면, 하나의 변수가 이상한 원조를 따를 수 있다.
    이 변수는 주로 이상 원인을 포함하는 이상 값을 수신합니다.이 변수는 하나의 원조 형식으로 하나 이상의 값을 받을 수 있다.이 모듈은 보통 오류 열, 오류 코드, 잘못된 위치를 포함합니다.예:
    다음은 예외적인 예입니다.
    
    #!/usr/bin/python
    
    # Define a function here.
    def temp_convert(var):
      try:
       return int(var)
      except ValueError, Argument:
       print "The argument does not contain numbers
    ", Argument # Call above function here. temp_convert("xyz");

    이렇게 하면 다음과 같은 결과가 발생합니다.
    
    The argument does not contain numbers
    invalid literal for int() with base 10: 'xyz'
    
    

    버퍼링 예외:
    raise 문장을 사용하여 몇 가지 이상을 던질 수 있다.일반raise 문장의 문법.구문
    
    raise [Exception [, args [, traceback]]]
    
    

    여기서 Exception은 예외 유형(예: NameError)이고 매개변수는 예외에 사용되는 매개변수 값입니다.이 매개 변수는 선택할 수 있습니다.제공되지 않은 경우 예외적인 매개변수는 None입니다.
    마지막 매개 변수traceback도 선택할 수 있고 (실천에서 거의 사용되지 않음) 존재하면 이상 소거 대상에 사용됩니다.예:
    이상은 문자열, 클래스, 대상일 수 있습니다.대부분의 파이썬 핵심 버퍼링은 클래스이며, 클래스의 실례로 여겨지는 파라미터가 있습니다.다음과 같이 새로운 예외를 정의하는 것이 쉽습니다.
    
    def functionName( level ):
      if level < 1:
       raise "Invalid level!", level
       # The code below to this would not be executed
       # if we raise the exception
    
    

    주: 이상을 포착하기 위해서 "except"문장은 버퍼 클래스나 간단한 문자열과 같은 이상을 인용해야 합니다.예를 들어, 위의 예외가 발견되면 다음과 같이 except 자구를 써야 합니다.
    
    try:
      Business Logic here...
    except "Invalid level!":
      Exception handling here...
    else:
      Rest of the code here...
    
    

    사용자 정의 예외:
    파이톤에서는 내장된 이상 표준의 파생 클래스를 통해 자신의 이상을 만들 수 있습니다.
    다음은 RuntimeError에 대한 예입니다.RuntimeError 하위 클래스에서 클래스가 생성됩니다.더 많은 구체적인 정보를 표시해야 할 때, 이상이 포착되는 것은 매우 유용하다.
    try 블록에서 사용자 정의 이상이 발생하고 except 블록에 끼웁니다.변수 e는 클래스 Networkerror를 만드는 데 사용됩니다.
    
    class Networkerror(RuntimeError):
      def __init__(self, arg):
       self.args = arg
    
    

    따라서 위에서 정의한 클래스는 다음과 같은 방법으로 예외를 제거할 수 있습니다.
    
    try:
      raise Networkerror("Bad hostname")
    except Networkerror,e:
      print e.args
    
    

    좋은 웹페이지 즐겨찾기