This rule raises an issue when an invalid "mode" is provided to the `open` builtin function. == Why is this an issue? The `open` builtin function can open files in different modes. These modes are provided as a combination of characters. Using an invalid sequence of characters will make `open` fail with a `ValueError`. A valid mode: * should contain only one of the following characters: `r` (read), `w` (write), `a` (append), `x` (create). * should contain zero or one of the following characters: `t` (text), `b` (binary). * should contain zero or one `+` character (open for updating) For example: `a`, `rt`, `r+` and `w+b` are valid modes. If no `t` or `b` character is provided the mode will default to `t` (text), so specifying `r` is equivalent to `rt`. *Note*: __In Python 2, providing an incorrect mode may have an undefined behavior (ex: it might ignore some characters)__ == How to fix it Make sure to provide a valid mode to the `open` builtin function. === Code examples ==== Noncompliant code example In Python 3 the following program will throw a `ValueError`. In Python 2.7.16 on MacOs, `open` will just ignore the `w` flag. [source,python,diff-id=1,diff-type=noncompliant] ---- with open("test.txt", "aw") as f: # Noncompliant: ValueError pass ---- ==== Compliant solution [source,python,diff-id=1,diff-type=compliant] ---- with open("test.txt", "a") as f: pass ---- === Pitfalls In Python 2, the character `U` (universal newlines) is available as a mode character but it cannot be combined with `a`, `w`, `x` or `+`. *Note*: __``++U++`` has no effect in Python 3, it is deprecated and is replaced by the parameter `newline` of the `open` function. The default value of `newline` is `None`, meaning universal newlines mode is enabled.__ == Resources === Documentation * https://docs.python.org/3/library/functions.html#open[The `open` builtin function] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Fix this invalid mode string. === Highlighting The mode parameter ''' == Comments And Links (visible only on this page) === is related to: S5488 endif::env-github,rspecator-view[]