Python错误处理机制

@(python程序员)[Python]


Python Cookbook

捕获所有的异常

处理异常的时候最好还会尽可能地使用精确的异常类。

def parse_int(s):
    try:
        n = int(v)
    except Exception as e:
        print("Couldn't parse")
        print("Reason:",e)

parse_int('42')
#Couldn't parse
#Reason: name 'v' is not defined

Learning Python

Exception Basics

Suppose we write the following function:

def fetcher(obj, index):
    return obj[index]

x = 'spam'
fetcher(x, 3)
#'m'

Catching Exceptions

def catcher():
    try:
        fetcher(x, 4)
    except IndexError:
        print('got exception')
    print('continuing')

catcher()
#got exception
#continuing

Raising Exceptions

try:
    raise IndexError # Trigger exception manually
except IndexError:
    print('got exception')

Exception Coding Details

  • try/except
    Catch and recover from exceptions raised by Python, or by you.
  • try/finally
    Perform cleanup actions, whether exceptions occur or not.
  • raise
    Trigger an exception manually in your code.
  • assert
    Conditionally trigger an exception in your code.
  • with/as
    Implement context managers in Python 2.6, 3.0, and later (optional in 2.5).

The try/except/else Statement

try:
    statements # Run this main action first
except name1:
    statements # Run if name1 is raised during try block
except (name2, name3):
    statements # Run if any of these exceptions occur
except name4 as var:
    statements # Run if name4 is raised, assign instance raised to var
except:
    statements # Run for all other exceptions raised
else:
    statements # Run if no exception was raised during try block

with/as Context Managers

The basic format of the with statement looks like this

with expression [as variable]:
    with-block

Pro Python Best Practices

Exceptions in Python

The Error Type

Technically, an error message means that Python has raised an Exception. The error type indicates which Exception class was raised. All Exceptions are subclasses of the Exception class. In Python 3.5, there is a total of 47 different Exception types. You can see the full list of Exceptions with

所有的Exceptions都是Exception类的子类。在Python3.5中一共有47中Exception类型。

[x for x in dir(__builtins__) if 'Error' in x]
Python错误处理机制_第1张图片
Figure: Hierarchy of Python Exceptions

Catching Exceptions

For sure, the following usage of try.. except is a terrible idea:

try:
    call_some_functions()
except:
    pass

This construct is known as the diaper pattern. It catches everything, but after a while you don’t want to look inside. It makes the Exception disappear, but creates a worse problem instead: the Exceptions are covered, but so are our possibilities do diagnose what is going on. A Best Practice is to use try.. except only for well-defined situations instead, and to always catch a specific Exception type.

你可能感兴趣的:(Python错误处理机制)