wk_10.md
Python检测和处理异常
try-except语句
try-except语句定义了进行异常监控的一段代码,并且提供了异常处理的机制,下面是使用的语法:
try:
# 可能抛出异常的语句,会一直执行,直到抛出异常。
except:
# 异常处理额语句,当try快任意语句抛出异常时执行。
当try中执行的语句没有抛出异常则except中的语句是不会执行的:
try:
print(float(23232))
print('********')
except:
print('except')
输出:
23232.0
********
当try中语句有多个时一旦执行到错误或异常的语句之后就是执行except中的语句并退出程序,而try中没有执行的语句则不会在被执行:
try:
print(float(23232))
print('********')
print(float('dota'))
print('-------')
except:
print('except')
输出:
23232.0
********
except
在try中定义的变量是可以在except中使用的:
try:
a='DOTA'
print(a)
print(float(a))
except:
print('except',a)
输出:
DOTA
except DOTA
通过制定类型对不同的异常做不同的处理:
try:
float('aaaa')
except ValueError as e:
print('aaaa value error. {}'.format(e))
except NameError as e:
print('aaaa name error. {}'.format(e))
except Exception:
print('error')
except:
print('......')
输出:
aaaa value error. could not convert string to float: 'aaaa'
- 异常语句从上往下执行,匹配到哪一条执行该条语句并停止匹配。
- 如果Exception放在最上面则下面的具体性异常ValueError或者NameError是不会执行的。
- 通常会把具体的异常放到上面,一般性的异常放到下面。
- 当不带任何模式的时候,相当于default分支,会捕获所有未捕获的异常。
finally 子句
- finally 语句总是会被执行,无论有没有抛出异常。所有的清理工作通常放到finally语句块里执行。
- finally 在return 语句之后,函数返回之前执行。通常使用中不会再finally 里return。
def fn():
try:
1 / 0
print('try')
return 1
except:
print('except')
return 2
finally:
print('finally')
return 3
print('fn')
return 4
print(fn())
输出:
except
finally
3
自定义异常
- 自定义异常需要我们自己抛出,使用raise语句抛出。
- raise 语句后面只能跟一个异常的实例。
class UserException(Exception):
pass
class SystemException(Exception):
pass
def div(x,y):
try:
return x/y
except ZeroDivisionError:
raise UserException('y must no be zero')
try:
div(5,0)
except UserException as e:
print(e)
except SystemException as e:
pass
输出:
y must no be zero
在实际的编码中,我们应该在哪一层处理异常:
- 通常在endpoint (指的一个边界)处处理异常。
- 有替代方案时立即处理异常。使用替代方案。
- 异常做为业务逻辑,不推荐使用。
- 异常可以忽略。
- 异常需要延后处理,需要立即处理,并暂存异常,以便延后处理。
导入模块
import 语句
import 语句用于导入模块,当模块导入后,就可以以模块名为命名空间,使用模块的变量,函数和类了。
In [1]: import os
In [3]: os.getcwd()
Out[3]: '/root'
from import 语句
可以把模块中指定的成员导入如到当前作用域,这就是部分导入,这种导入的命名空间也是部分的。
In [5]: from os import path
In [8]: path.basename('/tmp')
Out[8]: 'tmp'
In [9]: os.cpu_count()
Out[9]: 1
In [10]: from os import cpu_count
In [11]: cpu_count()
Out[11]: 1
扩展的 import 语句(as)
当我们导入模块的名称重复或者名称过长的时候就可以使用as 来进行重命名。
In [15]: from posix import stat_result as posix_stat_result
In [16]: from os import stat_result as os_stat_result
模块搜索路径
如果不做特殊修改,在用import导入模块是路径的先后顺序如下:当前目录-->标准库-->第三方库。
In [17]: import sys
In [18]: for path in sys.path:
....: print(path)
....:
/root/.pyenv/versions/3.5.2/envs/pengfei/bin
/root/.pyenv/versions/3.5.2/lib/python35.zip
/root/.pyenv/versions/3.5.2/lib/python3.5
/root/.pyenv/versions/3.5.2/lib/python3.5/plat-linux
/root/.pyenv/versions/3.5.2/lib/python3.5/lib-dynload
/root/.pyenv/versions/3.5.2/envs/pengfei/lib/python3.5/site-packages
/root/.pyenv/versions/3.5.2/envs/pengfei/lib/python3.5/site-packages/IPython/extensions
/root/.ipython
由于python默认第一是从当前目录进行导入模块,所以一旦当前路径的模块名和系统模块名重名则不会导入系统模块。
包
包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用程序执行环境。
- 一个目录下有
__init__.py
的时候,这个目录是一个模块(包),模块的内容写在__init__.py
。 - 这个目录下的其他文件,是这个模块的子模块。
- 导入子模块的时候会先导入父模块。
- 导入父模块不会自动导入子模块。
- 子模块可以使用
from parent import child
这样的形式导入,也可以使用import parent,child
。 import parent.child
这种导入方式,child
必须是子模块。- 同一模块下的子模块,可以使用相对导入,也可以使用绝对导入。
wk_10.md的更多相关文章
- 好用的Markdown编辑器一览 readme.md 编辑查看
https://github.com/pandao/editor.md https://pandao.github.io/editor.md/examples/index.html Editor.md ...
- github上readme.md 格式
参考:https://github.com/guoyunsky/Markdown-Chinese-Demo/edit/master/README.md
- .md文件的语法
md全称是Macdown,.md文件可以当记事本一样使用,作为编辑软件,还可以自己添加样式,图片,链接等,可以用记事本打开,也可以保持样式排版转换为html文件,语法比较简单..md除了编辑容易的优势 ...
- md语法之行内代码和代码片续集
md语法之行内代码和代码片 一行之内嵌入一小段代码, 简称行内代码. 其方法为: 用撇号把代码围起来. 比如: import numpy as ny就可以了. 代码片的方法: 三个连续的撇号+pyth ...
- md语法之行内代码和代码片
md语法之行内代码和代码片 比如说要在行内写上一句或者半句代码(代码的意思就是某种脚本语言), 用撇号围起来就可以了. 比如: import pandas as pd 写代码片(单独的一块脚本语言)的 ...
- bootstrap 之 xs,sm,md,lg && 主要颜色
mobile – xs ( <768px ) tablet – sm ( 768~991px ) desktop – md ( 992~1170px ) large desktop – lg ( ...
- Markdown(MD)写作
简洁的写作 目前正逐步使用Makedown来写博客或其它的文档,本文记录一下Markdown的相关知识 Markdown语法 标题 # 内容 (一级标题) ## 内容 (二级标题) ### 内容 (三 ...
- /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
一.MD(d).MT(d)编译选项的区别 1.编译选项的位置 以VS2005为例,这样子打开: 1) 打开项目的Property Pages对话框 2) 点击左侧C/C ...
- 警告 - no rule to process file 'WRP_CollectionView/README.md' of type net.daringfireball.markdown for architecture i386
warning: no rule to process file '/Users/mac/Downloads/Demo/Self/WRP_CollectionView/WRP_CollectionVi ...
随机推荐
- [HTML5] Canvas绘制简单形状
使用canvas来进行绘画,它像很多其他dom对象一样,有很多属性和方法,操作这些方法,实现绘画 获取canvas对象,调用document.getElementById()方法 调用canvas对象 ...
- 19、网络编程 (Socket套接字编程)
网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...
- 【转】解决IDEA新建项目名称为红色
idea如果当前project用了版本控制器,其下面新建的所有的项目默认都是加入到版本控制里面,所以项目名称和文件都是红色的,如图: File-->Settings-->version c ...
- java并发编程的艺术(四)---ConcurrentHashMap原理解析
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...
- 彻底弄懂HTTP缓存机制及原理(转载)
https://www.cnblogs.com/chenqf/p/6386163.html 前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系 ...
- MS SQL Server数据库在线管理工具
MS SQL Server数据库以其优异的性能,被广泛使用,特别是政务,医疗行业.但是远程维护挺不方便的,目前有一款基于WEB的工具TreeSoft数据库管理系统. 免安装,直接解压就可以用了.直接通 ...
- Hive可视化工具
目前市面上的Hive可视化客户端工具,大都是C/S模式的,安装使用都不是太方便,目前有一款基于WEB的可视化工具TreeSoft,通过浏览器就可以访问使用了,并且可以同时管理.维护.监控MySQL,O ...
- Spring学习手札(三)理解IoC 拯救不开心
Inverse of Control,翻译成“控制反转”,是Spring的核心.IoC不是一种技术,而是一种设计思想.就是将原本在程序中手动创建对象的控制权(new Object() ),交由Spri ...
- 慕课网 javascript深入浅出编程练习
任务 请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似.具体需求: 1. 数组中的成员类型相同,顺序可以不同.例如[1, true] 与 [false ...
- 大数据量报表APPLET打印分页传输方案
1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...