zoukankan      html  css  js  c++  java
  • Python基础之(异常与开发规范)

    一、异常

    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
    异常种类

    1.2、异常处理

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

    为什么需要异常处理?

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

    怎样进行异常处理?

    • 如果错误发生的条件是可预知的,我们需要用if进行处理:在错误发生之前进行预防
    • 如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理
    #if
    m = input(":")
    if type(m) is int:
        print(m)
    elif len(m) == 0:
        print("xxx")
    else:
        print(len(m))
        print("错误")
    
    #try...except
    #基本语法为:
    try:
        被检测的代码块
    except 异常类型:
        try中一旦检测到异常,就执行这个位置的逻辑
    
    m = input(":")
    try:
        int(m)
    except Exception as e:
        print(e)
    

    Ps:万能异常类:Exception

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

    二、软件开发规范

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

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

    2.2、设计项目目录结构

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

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

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

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

    较好的目录结构如下:

    具体说明:

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

      

  • 相关阅读:
    StrUtils单元中的函数
    windows系统字体问题
    进程间通讯(模拟远程CMD)
    sql远程连接SQL(不能打开到主机的连接,在端口 1433:连接失败)
    在delphi中三个形式:ADODB_TLB ADOInt ADODB
    安装Ms SQL Server时提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机。
    从Indy9升级到Indy10时IdTcpServer的变化
    如何实现调用DOS程序的时候的管道输入重定向!
    接口技术
    SysUtils单元函数
  • 原文地址:https://www.cnblogs.com/crazyjump/p/10197393.html
Copyright © 2011-2022 走看看