11 Python异常
11.1 异常捕获
try: # 正常的代码 except (异常类型): # 捕获到异常时的处理,可以捕获多种异常类型,使用逗号分隔 # 如果不填写异常类型则会捕获所有的异常 else: # 没有异常时的操作,这个可加也可不加,不加的话就直接退出层级关系就行 finally: # 不管有没有异常都可执行
- 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
- 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
- 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
11.2 raise异常抛出
当我们的程序出现异常判断时可以通过raise主动抛出异常中断当前程序,抛出给上层程序进行捕获。
try: a = 10 if(a < 18): raise Exception('你还未成年不能参加工作') except Exception as e: print(e)
11.3 自定义异常
有时候我们在设计程序时需要多很多判断,因此在命中我们自己的异常判断时需要有一个自己的异常类,这时可以通过创建一个新的异常类。新的异常需要继承Exception类,通过直接或间接的方式。
class myException(Exception): def __init__(self,code,message): self.message = message self.code = code try: a = 10 if(a < 18): raise myException('1001','你还未成年不能参加工作') except myException as e: print(e.code,e.message)
12 Python模块
12.1 模块的定义
Python模块时定义的类、函数和变量的一个文件,可以在模块里单独实现一些功能,通过不能的模块实现不同的功能,在项目中可以直接导入模块进行使用,这样做可以帮我们将代码进行独立化和解耦。
12.2 模块的导入
[from 模块] import [模块 | 类 | 变量 | 函数 | *] [as 别名]
- import 模块 # 导入某个模块,导入后可以使用该模块下的所有方法等,使用方法: 模块.方法
- form 模块 import 类|变量|函数 # 导入某个模块的类或变量或方法
- from 模块 import * # 导入某个模块的所有功能,使用时直接用方法名就行 这个跟第一个区别在于使用时不一样。
注意:在模块导入时有一个__all__变量,不设置时默认__all__变量为所有的内容,如果设置的话,当import * 时只会导入被设置的内容。__all__变量只对 * 起作用,对指定导入时不受影响。
12.3 自定义模块
在正常写代码时避免不了需要实现一个自己定义的模块,python中一个模块就是一个python的文件,文件名其实就是我们的模块名。
因此自定义模块,第一步新建一个.py文件,第二步import文件名即可。
12.4 Python包
上面我们提到过Python的模块其实就是一个Python的文件,那么如果模块太多的话就会有很多的文件,那么如何最文件进行归类呢?Python包就是将模块进行归类,它其实就是一个文件夹,在文件夹里包含一个__init__.py的文件,这个文件就是证明这个路径下是一个统一的包。
Python包的引入和模块的引入方式是一样的。