Python 2와 Python 3의 차이점

이 주제에서는 오케스트레이션 & 자동화 애플리케이션에 적용되는 Python 2와 3간의 차이점에 대해 설명합니다.

Python 2와 Python 3 사이의 차이점은 Python 문서에서 자세히 설명합니다. 예를 들어, Python 3.0을 참조하십시오. 또한 오케스트레이션 및 자동화의 컨텍스트에서 적용되는 차이점을 알고 있어야 합니다.

모듈 가져오기

스크립트 기능을 사용하면 스크립트를 작성할 때 Python 모듈을 가져올 수 있습니다. 언어 필드가 Python 2로 설정된 경우 java.util.Datere 모듈만 가져올 수 있습니다. Python 3으로 설정된 경우 다음 모듈을 가져올 수 있습니다.
  • array
  • base64
  • bs4
  • calendar
  • collections
  • datetime(Python 2 java.util.Date 모듈과 동일)
  • 이메일(email)
  • enum
  • hashlib
  • html
  • html2text
  • json
  • random
  • re
  • regex
  • 문자열
  • 시간
  • xml
또한 다음 Python 기본 제공은 Python 3 스크립트에만 사용할 수 있습니다.
  • 모두 ()
  • any()
  • bytearray()
  • bytes()
  • classmethod
  • staticmethod
  • 유형 ()

오류 유형

Python 3 구현에는 두 가지 새로운 오류 유형이 도입되었습니다.
  • ResilientSecurityException은 스크립트가 보안 제한을 위반하려고 하면 발생합니다.
  • ResilientMemoryLimitException은 스크립트가 허용된 최대 RAM 크기(64MB)보다 많은 양을 할당하려고 할 때 발생합니다.

'from' 키워드

Python 3의 from 키워드는 이메일 메시지 컨텍스트 오브젝트의 from 속성과 충돌합니다. 따라서 Python 3 스크립트에서는 emailmessage.from 사용이 지원되지 않으므로 emailmessage.sender로 대체해야 합니다. Python 2는 여전히 emailmessage.from을 지원합니다.

존재하지 않는 필드

Python 2에서는 존재하지 않는 컨텍스트 오브젝트 속성에 액세스하려는 시도가 성공하고 None을 리턴합니다. 그러나 Python 3에서는 동일한 조작으로 필드 이름이 유효하지 않다는 속성 오류가 발생합니다. 이 동작은 표준 Python 3과 일치합니다. hasattr() 메소드를 사용하여 속성이 있는지 확인할 수 있습니다. 예를 들어, 다음과 같습니다.
if hasattr(incident, 'nonExistentField'):
  log.info(incident.nonExistentField)
else:
  log.info('Tried to access a field that does not exist')
스크립트는 다음 로그 메시지를 리턴합니다.
INFO: Cannot access a field that does not exist.

유니코드 지원

Python 3는 기본적으로 유니코드를 지원합니다. 즉, 문자열을 유니코드로 저장하기 위해 더 이상 u 접두사 또는 unicode() 함수를 명시적으로 사용할 필요가 없습니다. Python 2에서 Python 3으로 기존 스크립트를 변환하는 경우 Python 3에서 유니코드 관련 오류가 발생하지 않도록 해당 요소를 확인하고 제거해야 합니다. 자세한 정보는 Python 3 문서 https://docs.python.org/3.6/howto/unicode.html을 참조하십시오.

텍스트 오브젝트 데이터 유형

텍스트 오브젝트 데이터 유형은 Python 2와 Python 3에서 다르게 작동합니다. 이러한 차이점 때문에 Python 2에서 3으로 변환된 스크립트가 반드시 중단되는 것은 아니지만, 관심이 있을 수 있습니다.
  • Python 3에서는 간단한 문자열을 사용하여 텍스트 영역 필드의 값을 설정하든 헬퍼 함수를 사용하든 값이 TextObject로 저장됩니다. Python 2에서 간단한 문자열을 사용하여 텍스트 영역 필드의 값을 설정하면 값이 유니코드 오브젝트로 저장됩니다. 헬퍼 함수를 사용하여 설정하면 값이 SimpleTextContentDTO로 저장됩니다.
  • Python 3에서 TextObject 유형의 오브젝트에 대한 기본 형식은 'html'입니다. helper.createPlainText()를 호출하여 필드 값이 설정된 경우에만 형식이 'text'로 설정됩니다. Python 2에서 SimpleTextContentDTO 유형의 오브젝트 형식은 값을 설정하기 위해 호출되는 헬퍼에 따라 TEXT 또는 HTML일 수 있습니다.
다음 스크립트를 실행하고 로그 메시지를 확인하여 Python 버전의 차이점을 탐색할 수 있습니다.
incident.description = 'set direct'
log.info(type(incident.description)) 

incident.description = helper.createPlainText('set using createPlainText helper') 
log.info(type(incident.description)) 

incident.description = helper.createRichText('set using createRichText helper') 
log.info(type(incident.description))