Home >Backend Development >Python Tutorial >Should You 'Ask Forgiveness, Not Permission' in Your Python Code?

Should You 'Ask Forgiveness, Not Permission' in Your Python Code?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-10 11:07:16928browse

Should You

The Philosophy Behind "Ask Forgiveness Not Permission"

The phrase "ask forgiveness not permission" is often used in coding to describe a programming style that prioritizes the execution of operations rather than checking for permissions beforehand.

In Pythonic code, this principle suggests that instead of using conditional statements to verify the existence of attributes or the validity of operations, it's more efficient to attempt the operation and handle any resulting exceptions.

Example Scenario and the "Ask Forgiveness" Approach

Consider a class with an optional attribute bar. In traditional programming, one might check if the attribute exists before using it:

if foo.bar:
    # Do stuff

However, the "ask forgiveness" approach advises:

try:
    foo.bar  # Attempt to access the attribute
    # Do stuff    
except AttributeError:
    # Handle the error if the attribute doesn't exist

Arguments for "Ask Forgiveness"

  • Concurrency: In multithreaded environments or when handling external resources, the state of the system can change between the permission check and the operation.
  • Precision: Defining specific permission checks can be difficult, leading to either false positives or false negatives.

Exceptions for Optional Attributes

In the case of optional attributes, the accepted Pythonic approach is to initialize the attribute to None and check its existence explicitly:

if foo.bar is not None:
    # Handle the optional part
else:
    # Default handling

This ensures that the code is clear and the intent to handle optional attributes is明确的.

The above is the detailed content of Should You 'Ask Forgiveness, Not Permission' in Your Python Code?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn