7.Python-异常和警告

异常

try & except 块

一旦 try 块中的内容出现了异常,那么 try 块后面的内容会被忽略,Python会寻找 except 里面有没有对应的内容,如果找到,就执行对应的块,没有则抛出这个异常。

查看异常类别:dir(_builtins_)

异常类名 描述 异常类名 描述
BaseException 所有异常的基类 KeyError 映射中不存在此键
Exception 常规异常的基类 NameError 找不到名字(变量)
AttributeError 对象不存在此属性 SyntaxError Python语法错误
IndexError 序列中无此索引 TypeError 对类型无效的操作
IOError 输入输出操作失败 ZeroDivisionError 除(或取模)运算的第二个参数为0
KeyboardInterrupt 用户中断智行(通常输入Ctr-C) ValueError 传入无效的参数

捕捉不同的错误类型

将except 的值改成 Exception 类,来捕获所有的异常

while True:
    try:
        ...
    except Exception:
        print "..."

捕指定特定异常值

    except  (ValueError, ZeroDivisionError):
        print "..."
#等同
    except ValueError:
        print "..."
    except ZeroDivisionError:
        print "..."

使用 except Exception 时,会捕获所有的 Exception 和它派生出来的子类,但不是所有的异常都是从 Exception 类派生出来的,可能会出现一些不能捕获的情况,因此,更加一般的做法是使用这样的形式:

try:
    pass
except:
    pass

finally

不管 try 块有没有异常, finally 块的内容总是会被执行,而且会在抛出异常前执行,因此可以用来作为安全保证,比如确保打开的文件被关闭。

try:
    print 1 / 0
except ZeroDivisionError:
    print 'divide by 0.'
finally:
    print 'finally was called.'
#out: divide by 0. finally was called.

警告

出现了一些需要让用户知道的问题,但又不想停止程序,可以使用警告。
在需要的地方用 warnings 中的 warn 函数: warn(msg, WarningType = UserWarning)
想要忽略特定类型的警告,用 warnings 的 filterwarnings 函数:
filterwarnings(action, category)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容