mirror of https://github.com/astral-sh/ruff
doc: add documentation for TRY002 (#2655)
This commit is contained in:
parent
3862dc2626
commit
9cd1bf9c03
|
|
@ -1368,7 +1368,7 @@ For more, see [tryceratops](https://pypi.org/project/tryceratops/1.1.0/) on PyPI
|
|||
|
||||
| Code | Name | Message | Fix |
|
||||
| ---- | ---- | ------- | --- |
|
||||
| TRY002 | raise-vanilla-class | Create your own exception | |
|
||||
| [TRY002](https://github.com/charliermarsh/ruff/blob/main/docs/rules/raise-vanilla-class.md) | [raise-vanilla-class](https://github.com/charliermarsh/ruff/blob/main/docs/rules/raise-vanilla-class.md) | Create your own exception | |
|
||||
| TRY003 | raise-vanilla-args | Avoid specifying long messages outside the exception class | |
|
||||
| TRY004 | prefer-type-error | Prefer `TypeError` exception for invalid type | 🛠 |
|
||||
| TRY200 | reraise-no-cause | Use `raise from` to specify exception cause | |
|
||||
|
|
|
|||
|
|
@ -7,6 +7,46 @@ use crate::registry::Diagnostic;
|
|||
use crate::violation::Violation;
|
||||
|
||||
define_violation!(
|
||||
/// ### What it does
|
||||
/// Checks for code that raises `Exception` directly.
|
||||
///
|
||||
/// ### Why is this bad?
|
||||
/// Handling such exceptions requires the use of `except Exception`, which
|
||||
/// captures _any_ raised exception, including failed assertions,
|
||||
/// division by zero, and more.
|
||||
///
|
||||
/// Prefer to raise your own exception, or a more specific built-in
|
||||
/// exception, so that you can avoid over-capturing exceptions that you
|
||||
/// don't intend to handle.
|
||||
///
|
||||
/// ### Example
|
||||
/// ```py
|
||||
/// def main_function():
|
||||
/// if not cond:
|
||||
/// raise Exception()
|
||||
/// def consumer_func():
|
||||
/// try:
|
||||
/// do_step()
|
||||
/// prepare()
|
||||
/// main_function()
|
||||
/// except Exception:
|
||||
/// logger.error("Oops")
|
||||
/// ```
|
||||
///
|
||||
/// Use instead:
|
||||
/// ```py
|
||||
/// def main_function():
|
||||
/// if not cond:
|
||||
/// raise CustomException()
|
||||
/// def consumer_func():
|
||||
/// try:
|
||||
/// do_step()
|
||||
/// prepare()
|
||||
/// main_function()
|
||||
/// except CustomException:
|
||||
/// logger.error("Main function failed")
|
||||
/// except Exception:
|
||||
/// logger.error("Oops")
|
||||
pub struct RaiseVanillaClass;
|
||||
);
|
||||
impl Violation for RaiseVanillaClass {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
# raise-vanilla-class (TRY002)
|
||||
|
||||
Derived from the **tryceratops** linter.
|
||||
|
||||
### What it does
|
||||
Checks for code that raises `Exception` directly.
|
||||
|
||||
### Why is this bad?
|
||||
Handling such exceptions requires the use of `except Exception`, which
|
||||
captures _any_ raised exception, including failed assertions,
|
||||
division by zero, and more.
|
||||
|
||||
Prefer to raise your own exception, or a more specific built-in
|
||||
exception, so that you can avoid over-capturing exceptions that you
|
||||
don't intend to handle.
|
||||
|
||||
### Example
|
||||
```py
|
||||
def main_function():
|
||||
if not cond:
|
||||
raise Exception()
|
||||
def consumer_func():
|
||||
try:
|
||||
do_step()
|
||||
prepare()
|
||||
main_function()
|
||||
except Exception:
|
||||
logger.error("Oops")
|
||||
```
|
||||
|
||||
Use instead:
|
||||
```py
|
||||
def main_function():
|
||||
if not cond:
|
||||
raise CustomException()
|
||||
def consumer_func():
|
||||
try:
|
||||
do_step()
|
||||
prepare()
|
||||
main_function()
|
||||
except CustomException:
|
||||
logger.error("Main function failed")
|
||||
except Exception:
|
||||
logger.error("Oops")
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# raise-vanilla-class (TRY002)
|
||||
Derived from the **tryceratops** linter.
|
||||
|
||||
### What it does
|
||||
Checks for bare exceptions.
|
||||
|
||||
## Why is this bad?
|
||||
It's hard to capture generic exceptions making it hard for handling specific scenarios.
|
||||
|
||||
## Example
|
||||
```py
|
||||
def main_function():
|
||||
if not cond:
|
||||
raise Exception()
|
||||
def consumer_func():
|
||||
try:
|
||||
do_step()
|
||||
prepare()
|
||||
main_function()
|
||||
except Exception:
|
||||
logger.error("I have no idea what went wrong!!")
|
||||
```
|
||||
|
||||
## How it should be
|
||||
```py
|
||||
def main_function():
|
||||
if not cond:
|
||||
raise CustomException()
|
||||
def consumer_func():
|
||||
try:
|
||||
do_step()
|
||||
prepare()
|
||||
main_function()
|
||||
except CustomException:
|
||||
logger.error("Main function failed")
|
||||
except Exception:
|
||||
logger.error("I have no idea what went wrong!!")
|
||||
```
|
||||
Loading…
Reference in New Issue