python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python的异常(Python Exception)

Python的异常问题(Python Exception)

作者:子黄求知若渴

这篇文章主要介绍了Python的异常问题(Python Exception),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

异常 Exception

错误

异常

Python中的Exception

raise

raise Exception  # 使用无参初始化
raise Exception('Exception', 200)  #带参初始化
try:
    raise Exception()
except:
    raise # 抛出上面的异常实例

try语句块

语句作用
try在try后except前的语句将会由except来捕获
except语句后跟一个异常类(继承自BaseException或其子类),该except会捕捉该类或其子孙类实例。如果未捕获到且后续还有except语句则会由后续语句继续捕获,如果到最后一个except语句仍未被捕获,则抛出到调用者。可以在类后跟 as e ,在as后跟一个变量会将捕获到的异常类实例赋给变量。
finally在finally语句中的语句不管是否发生异常都会被执行
else如果没有发生异常,执行else中的语句
try:
    1 / 0 # 将会触发0除异常 ZeroDivisionError
except SystemExit as e: # 不是ZeroDivisionError异常的祖先类,捕获不到
    print('SystemExit', e)
except ZeroDivisionError as e:# 捕获ZeroDivisionError异常
    print('ZeroDivisionError', e)
else:
    print('else') # 有异常,else语句不执行
finally:
    print('fianlly')
>>>ZeroDivisionError division by zero
>>>finally
try:
    x = 1 # 不产生异常
except SystemExit as e: 
    print('SystemExit', e)
except ZeroDivisionError as e:
    print('ZeroDivisionError', e)
else:
    print('else') # 没有异常,else语句被执行
finally:
    print('fianlly') # finally中的语句依旧被执行
>>>else
>>>finally    

捕获策略

立即捕获

在异常发生处直接捕获进行处理。

def get_int(data):
    """
    转换一个值为int类型
    """
    try:
        return int(data)
    except:
        return 0

发生异常后直接返回一个固定的值,而不向外抛出。

调用者无需处理该异常,有时返回的结果不符合预期。

边界捕获

封装产生边界

类继承树

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文