Fix invalid escape sequences in regex strings#340
Open
DavidCain wants to merge 1 commit intojamescasbon:masterfrom
Open
Fix invalid escape sequences in regex strings#340DavidCain wants to merge 1 commit intojamescasbon:masterfrom
DavidCain wants to merge 1 commit intojamescasbon:masterfrom
Conversation
Summary
=======
This commit fixes deprecation warnings that arise from using backslashes
in strings, but *not* as part of an escape sequence. It will help this
library be used with newer versions of Python.
String literals do not change (for current versions of Python)
==============================================================
```python
>>> r'[\[\]]' == '[\[\]]'
True
```
Examples
========
```bash
$ python -Wd -c 'print("\d")'
DeprecationWarning: invalid escape sequence \d
$ python -W error -c 'print("\d")'
SyntaxError: invalid escape sequence \d
```
Explanation
===========
For an explanation of the problem (and the recommended solution),
see: https://docs.python.org/3/library/re.html
> Also, please note that any invalid escape sequences in Python’s usage
> of the backslash in string literals now generate a DeprecationWarning
> and in the future this will become a SyntaxError. This behaviour will
> happen even if it is a valid escape sequence for a regular expression.
>
> The solution is to use Python’s raw string notation for regular
> expression patterns; backslashes are not handled in any special way in
> a string literal prefixed with 'r'.
How to keep these errors from source code
=========================================
I didn't make any proposed changes in this commit, but there are a few
ways to make sure that *new* invalid escape sequences are not used:
- Use a linter!
- `pylint` has `anomalous-backslash-in-string`
- `flake8` has `W605`
- other linters work too!
- Escalate deprecation warnings to full errors at test time
(e.g. `error:invalid escape sequence:DeprecationWarning` with
`filterwarnings` will change these warnings to errors)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This commit fixes deprecation warnings that arise from using backslashes
in strings, but not as part of an escape sequence. It will help this
library be used with newer versions of Python.
String literals do not change (for current versions of Python)
Examples
Explanation
For an explanation of the problem (and the recommended solution),
see: https://docs.python.org/3/library/re.html
How to keep these errors from source code
I didn't make any proposed changes in this commit, but there are a few
ways to make sure that new invalid escape sequences are not used:
pylinthasanomalous-backslash-in-stringflake8hasW605(e.g.
error:invalid escape sequence:DeprecationWarningwithfilterwarningswill change these warnings to errors)