itsource

DeprecationWarning: 잘못된 이스케이프 시퀀스 - \d 대신 사용할 항목

mycopycode 2022. 10. 15. 09:17
반응형

DeprecationWarning: 잘못된 이스케이프 시퀀스 - \d 대신 사용할 항목

에 문제가 생겼다.rePython 3.6.5의 모듈.정규 표현에는 다음과 같은 패턴이 있습니다.

'\\nRevision: (\d+)\\n'

하지만 막상 해보니까DeprecationWarning.

SO에서 문제를 검색했지만 실제로는 답을 찾지 못했습니다.\d+?그냥...[0-9]+아니면 다른 거라도?

Python 3은 문자열 리터럴을 Unicode 문자열로 해석하기 때문에\d는 이스케이프된 Unicode 문자로 취급됩니다.

RegEx 패턴을 미가공 문자열로 선언하는 대신 프리펜딩r이하와 같습니다.

r'\nRevision: (\d+)\n'

이것은 또한 당신이 탈출구를 떨어뜨릴 수 있다는 것을 의미합니다.\n이것들은 단지 줄바꿈 문자로 해석될 것이기 때문에re.

사용 중지 경고가 표시됩니다.

'\\nRevision: (\d+)\\n'

왜냐하면 Python은\d유효하지 않은 이스케이프 시퀀스입니다.현재 Python은 이 서브스트링을 대체하지 않고 Version 3.6부터 경고하고 있습니다.

표준 C와 달리 인식되지 않는 이스케이프 시퀀스는 모두 변경되지 않은 상태로 남아 있습니다.즉, 백슬래시는 결과에 남습니다(이 동작은 디버깅 시 도움이 됩니다.에스케이프 시퀀스가 잘못 입력되어 있는 경우 출력은 파손된 것으로 인식되기 쉽습니다).또한 스트링 리터럴에서만 인식되는 이스케이프 시퀀스는 바이트 리터럴에서 인식되지 않는 이스케이프 카테고리에 속한다는 점도 중요합니다.

버전 3.6에서 변경됨: 인식되지 않는 이스케이프 시퀀스는 Deprecation Warning을 생성합니다.향후 Python 버전에서는 SyntaxWarning이 되고 최종적으로 SyntaxError가 됩니다.

(소스)


따라서 이 경고를 수정하려면 해당 백슬래시를 올바르게 이스케이프하거나 원시 문자열을 사용합니다.

즉, 더 많이 탈출할 수 있습니다.

'\\nRevision: (\\d+)\\n'

또는 raw 문자열 리터럴을 사용합니다(여기서).\는 이스케이프 시퀀스를 시작하지 않습니다).

r'\nRevision: (\d+)\n'

언급URL : https://stackoverflow.com/questions/50504500/deprecationwarning-invalid-escape-sequence-what-to-use-instead-of-d

반응형