python的异常处理和模块发布安装

1.完整的异常处理

 异常处理能够保证程序出错是也能够完整运行,不会应为bug而停止运行,这里介绍下获取异常的完整格式

 1 try:
 2     num = int(input("输入整数:"))
 3     print(8/num)
 4 
 5 except ValueError:
 6     print("请输入正确的整数!")
 7 except ZeroDivisionError:
 8     print("不能为0")
 9 
10 except Exception as result:
11     print("未知异常 %s" % result)
12 
13 else:
14     print("成功运行没有报错")
15 
16 finally:
17     print("不管有什么问题,我都要运行!")
18 
19 print("结束!")

ValueError和ZeroDivisionError是两个系统存在的异常,表示值错误和除(或取模)零 错误
通过try对可能存在异常的部分进行检测,如果有异常,try中代码不运行,同时检测except中的异常类型进行匹配,其中Exception表示所有异常,没有异常则运行else中能代码
finally中的代码无论是否有异常都要运行
实际获取异常中不需要这么完整,可根据具体情况自行删减

2.异常的传递性

1 def fun():
2     num = int(input("输入整数:"))
3     return 10 / num
4 
5 try:
6     print(fun())
7 except Exception as result:
8     print(result)

异常是有传递性的,在函数方法中如果出现了异常,程序是不会直接报异常的,等到运行到主线程中还没有处理掉这个异常那么此时就会报异常,同时停止程序
按照原来的思路,需要在每个可能出现异常的地方进行获取异常,这样函数方法一多久或造成代码太过繁琐
那么根据异常的传递性可以在主线程中进行抛异常

3.自定义抛出异常

 1 def fun():
 2     num = input("请输入9个字符:")
 3 
 4     if len(num) == 9:
 5         return num
 6     ex = Exception("长度不够9!")
 7 
 8     raise ex
 9 
10 try:
11     print(fun())
12 except Exception as result:
13     print(result)

有些时候需要自已定义异常,来满足开发需求,那么需要raise 来返回自定义的异常

4.本包内调用其他模块

import card_main
from t1 import function as mmm

import + 模块名,如果模块名太长,可以采用as进行别名
只是获取一个方法那么可以采用from  +  模块名 + import + 函数名

5.不同包内调用模块

python的异常处理和模块发布安装

测试包测试导入pytest内的模块,方法同样是采用import.pytest.模块名
这里需要对pytest包内的__init__.py文件进行编写

1 from . import t1
2 from . import 静态方法

表示允许t1和静态方法模块被调用

6.__name__

1 def __main():
2        print(__name__)
3 
4 
5 if __name__ == "__main__":
6        __main()

__name__是Python的内置属性,当前模块是主线程时为__main__,当前不是时为该模块的名称,
用这个方法可以成功的把模块中的实现给规避掉

7.发布模块

首先要新建一个项目,把需要共享的模块复制进来,在新建一个setup.py文件

 1 from distutils.core import setup
 2 
 3 setup(name="pytest",  # 发布的模块名
 4       version="1.0",  # 版本号
 5       description="xxxx模块",  # 简要描述
 6       long_description="xxxxxxxxxxxxxxx",  # 全部的描述
 7       author="lsd",  # 作者
 8       url="www.baidu.com",  # 主页地址
 9       
10       # 发布的模块名
11       py_modules=["pytest.t1",
12                   "pytest.静态方法"]
13       )

之后,在该项目目录下打开cmd,或者Powershell

python setup.py build 表示编译
python setup.py sdist 表示发布
python setup.py install 表示安装

python的异常处理和模块发布安装

安装模块工具包还可以采用pip安装,这里暂时不介绍