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.不同包内调用模块
测试包测试导入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 表示安装
安装模块工具包还可以采用pip安装,这里暂时不介绍