• Python基础 7.异常


    7.1异常

    在 Python 中所有的异常都是继承自 BaseException 直接分为四大类:

    SystemExit:Python退出异常
    KeyboardInterrupt: 键盘打断(Ctrl+C)
    GeneratorExit: 生成器退出()
    Exception: 普通异常(只会使用这部分的异常)

     

    7.2处理异常

    1.基本的 try … except …

    1 try:
    2       首先写一个try ,然后把所有可能出错的代码,放到里面去。
    3       print-"----------")      #第一条正确的
    4       print(a)                 #第2条错误的
    5       print(--------3-------") #第三条正确的
    6 except :  
    7       pass  #下面是写捕获到异常的处理方案。

    代码中会出现的异常都是 Exception 的子类, 因此在 except 中只需要在最后加上 Exception 即可

    2.更加丰富的结构:

     1   try:
     2  3   print-"---------")print(a)
     4  5   print---------------")
     6  7   except Exception as result:  #在这里用个as将捕获到的异常用个变量保存起来。
     8  9   print('捕获到了异常,会执行我下面的代码对异常进行处理')print(result) # 打印result,把捕获异常信息返回出去。
    10 11   else:
    12 13   print("没有捕获到异常,执行我")finally:
    14 15   print("不管有没有异常,我都会执行”)

     

    3.注意事项:

    1. try       下面放可能出错的代码 

    2. except try下面的代码出错后,会执行except下面的代码

    3. else     try下面代码没有错误,执行else下面的代码

    4. finally 不管try下面的代码有没有出错,始终都会执行

    7.3自定义异常类型raise:

     

    class MyError(Exception): #自定义的异常必须继承Exception
    pass
    raise MyError('异常信息') # 主动抛出 自定义异常

       格式:raise 异常类型

    注意:raise  是主动抛出后面写的异常类型

    7.4断言

    断言语句是将调试断言插入程序的一种便捷方式

    assert 1 == 1
    assert 1 == 2,'报错了'

    assert 的语法规则是:

    表达式返回 True  不报错

    表达式返回 False 报错 报 AssertionError


    一、补充(异常)

    1.1、Python中错误分为两种:

    • 语法错误,这种错误根本过不了python解释器的语法检测,必须在程序执行前就改正
    • 逻辑错误,如int("m")

    异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下:

    python中异常的种类:

     1 #常用异常
     2 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
     3 IOError 输入/输出异常;基本上是无法打开文件
     4 ImportError 无法引入模块或包;基本上是路径问题或名称错误
     5 IndentationError 语法错误(的子类) ;代码没有正确对齐
     6 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
     7 KeyError 试图访问字典里不存在的键
     8 KeyboardInterrupt Ctrl+C被按下
     9 NameError 使用一个还未被赋予对象的变量
    10 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    11 TypeError 传入对象类型与要求的不符合
    12 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    13 导致你以为正在访问它
    14 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    15 
    16 #更多异常
    17 ArithmeticError
    18 AssertionError
    19 AttributeError
    20 BaseException
    21 BufferError
    22 BytesWarning
    23 DeprecationWarning
    24 EnvironmentError
    25 EOFError
    26 Exception
    27 FloatingPointError
    28 FutureWarning
    29 GeneratorExit
    30 ImportError
    31 ImportWarning
    32 IndentationError
    33 IndexError
    34 IOError
    35 KeyboardInterrupt
    36 KeyError
    37 LookupError
    38 MemoryError
    39 NameError
    40 NotImplementedError
    41 OSError
    42 OverflowError
    43 PendingDeprecationWarning
    44 ReferenceError
    45 RuntimeError
    46 RuntimeWarning
    47 StandardError
    48 StopIteration
    49 SyntaxError
    50 SyntaxWarning
    51 SystemError
    52 SystemExit
    53 TabError
    54 TypeError
    55 UnboundLocalError
    56 UnicodeDecodeError
    57 UnicodeEncodeError
    58 UnicodeError
    59 UnicodeTranslateError
    60 UnicodeWarning
    61 UserWarning
    62 ValueError
    63 Warning
    64 ZeroDivisionError
    65 
    66 异常种类
    View Code 

    1.2、异常处理

    python解释器检测到错误,触发异常(也允许程序员自己触发异常)程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

    为什么需要异常处理?

    python解析器去执行程序,当检测到了一个错误时就会触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 

    怎样进行异常处理?

    • 如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防
    • 如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理
     1 #if
     2 m = input(":")
     3 if type(m) is int:
     4     print(m)
     5 elif len(m) == 0:
     6     print("xxx")
     7 else:
     8     print(len(m))
     9     print("错误")
    10  
    11 #try...except
    12 #基本语法为:
    13 try:
    14     被检测的代码块
    15 except 异常类型:
    16     try中一旦检测到异常,就执行这个位置的逻辑
    17  
    18 m = input(":")
    19 try:
    20     int(m)
    21 except Exception as e:
    22     print(e)

    Ps:万能异常类:Exception

    1 #主动触发异常raise
    2 try:
    3     raise TypeError('类型错误')
    4 except Exception as e:
    5     print(e)

    二、补充(软件开发规范)

    2.1、为什么需要规范软件开发

    你现在包括之前写的一些程序,所谓的'项目',都是在一个py文件下完成的,代码量撑死也就几百行,你认为很好。但是真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码,你全都放在一个py文件中行么?这显然是不行的。我们需要有一个较好的规范才能保证在开发过程中不混乱或者叫杂乱无章。软件开发首先规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰、合理的开发。

    2.2、设计项目目录结构

    "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题。对于这种风格上的规范,一直都存在两种态度:

    • 一类程序员认为,这种个人风格问题"无关紧要"。理由是能让程序work就好,风格问题根本不是问题。
    • 另一类认为,规范化能更好的控制程序结构,让程序具有更高的可读性

    我是比较偏向于后者的,因为我是前一类程序员思想行为下的直接受害者。我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费了我非常长的时间去理解它想表达的意思。从此我个人对于提高项目可读性、可维护性的要求就很高了。"项目目录结构"其实也是属于"可读性和可维护性"的范畴,我们设计一个层次清晰的目录结构,就是为了达到以下两点:

    • 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等。从而非常快速的了解这个项目。
    • 可维护性高: 定义好组织规则后,维护者就能很明确地知道新增的文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好

    较好的目录结构如下:

    具体说明:

     1 #bin 启动文件
     2 #conf 配置文件
     3 #core 主程序
     4 #db  数据库
     5 #lib  第三方库
     6 #log  日志
     7 #readme
     8 软件定位,软件的基本功能代码目录结构说明,更详细点可以说明软件的基本原理
     9 运行代码的方法: 安装环境、启动命令等
    10 常见问题说明
     

     

  • 相关阅读:
    WINCE/WM5.0如何让安装完后自动运行程序
    Android 图片透明度处理代码
    windows mobile UI 自定义开始菜单图标
    Windows mobile 6捕获键盘操作
    HTTP的post和get总结
    提供一个Windows mobile Native UI 程序,循序渐进开发,并附有代码!
    Windows Mobile 中ComboBox【下拉列表】的使用
    注册表修改今日桌面左右软键的功能
    .net compact framework 注册表操作
    两种实现Toast 的例子(图片&文字)
  • 原文地址:https://www.cnblogs.com/dyf25288-/p/11675103.html
Copyright © 2020-2023  润新知