Skip to main content

flake8-escaping-style

A flake8 plugin to help maintain a consistent style of escape sequences in string and bytes literals throughout your project.

Installation

This plugin requires at least version 3.7 of Python.

Like most flake8 plugins, start by installing the package:

pip install flake8-escaping-style

Then in your flake8 configuration, use a combination of select and ignore that matches your preferences.

For example, here's how it would look like if you wanted to prevent all escapes except for \N{name of character}:

select=ESC1
ignore=ESC105

List of error codes

For string literals (str)

Error code Escape sequence style Example string ("café")
ESC101 Octal (3 digits) "caf\351"
ESC102 Hexadecimal (2 digits) "caf\xe9"
ESC103 Hexadecimal (4 digits) "caf\u00e9"
ESC104 Hexadecimal (8 digits) "caf\U000000e9"
ESC105 Named character "caf\N{latin small letter e with acute}"

For byte string literals (bytes)

For completeness's sake, this plugin can also detect escape styles in bytestring literals:

Error code Escape sequence style Example bytestring
ESC201 Octal (3 digits) b"caf\351"
ESC202 Hexadecimal (2 digits) b"caf\xE9"

Motivation

Python has several different ways to write escape sequences.

In the old days of Python 2, any file was assumed to be ascii encoded unless you added a special comment on the first line. That meant that if you wanted to write the string "café" in your source code, you had to either add that comment on the first line of your file, or use an escape sequence like "caf\xe9" or "caf\u00E9".

Nowadays, Python has lifted those limitations and uses a more practical default encoding (utf-8, see PEP3120). So for most string literals you can use the character you want without having to use escape sequences at all.

I'd still recommend using an escape sequence when using "weird" 1 characters and especially invisible ones. But in that case I like to use the "named character" escaping style \N{name}.

Consider for example the case of a non-breaking space. It's a nifty little character and it can be very useful sometimes but it can also lead to some tough debugging:

Can you spot the difference?

>>> "hello world" == "hello world"
False

Using an escape sequence here (rather than the character itself) makes it more obvious as to what is going on:

>>> "hello world" == "hello\xa0world"
False

That's better in my opinion, but it still requires knowing which character has the number A0 in hexadecimal. The best option is to use a named escape sequence:

>>> "hello world" == "hello\N{no-break space}world"
False

For that reason, I prefer my projects to only use the "named" style of escape sequences (ESC105).

  1. By "weird" I mean any character that requires more than two fingers to type on my keyboard. ↩

Release files for flake8-escaping-style 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flake8-escaping-style 0.1.2
File Size Uploaded
flake8-escaping-style-0.1.2.tar.gz 5.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flake8-escaping-style 0.1.2
File Interpreter ABI Platform
flake8_escaping_style-0.1.2-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 11.1 kB

Release files / flake8-escaping-style-0.1.2.tar.gz

Download URL flake8-escaping-style-0.1.2.tar.gz
Size 5.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2e2b4653cd83279bd052e7273a501c91108898cf52096943a9eda53e80451145
BLAKE2b-256 checksum
How to use checksums
b44db007f50bd50b22509ef92abc06dc02192bb5649e41ef29fe189a0d296a1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

Release files / flake8_escaping_style-0.1.2-py2.py3-none-any.whl

Download URL flake8_escaping_style-0.1.2-py2.py3-none-any.whl
Size 5.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
253ec6105b0a52c1e3ca82442b218cd6d559f832e390b0ca95ea8101bc135d6f
BLAKE2b-256 checksum
How to use checksums
df39f6604947212db511a8fe11fec757bff4975dd6889484b1196c574de3bbc1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page