python 常见错误和异常 函数 正则表达式及多线程编程
生成随机密码
#!/usr/bin/env python
import string
from random import choice
def gen_pass(num=9):
all_chs = string.letters + string.digits
pwd = ''
for i in range(9):
pwd += choice(all_chs)
return pwd
if __name__ == '__main__':
print gen_pass (4)
print gen_pass ()
——————————————————————————————————————————————————————————
python错误和异常
错误
从软件方面来说,错误是语法上或逻辑上的
语法错误只是软件上的结构上有错误,导致不能被解释器解释或编译器无法编译
这些错误必须在程序执行钱纠正
逻辑错误可能是由于不完整或是不合发的输入所致,还可能是逻辑无法生成,计算
或是输出结果需要过程无法执行
异常
当python检测到一个错误时,解释器就会指出当前流已经无法继续执行下棋
这时候就出现了异常,异常是因为程序出现了错误而在正常控制流以外采取的行为
这个行为又分为两个阶段,首先是引起异常发生的错误然后是检测阶段
异常
NameError:未声明/初始化对象
IndexError:序列中没有此索引
SyntaxError:语法错误
KeyboardInterrupt:用户中断执行
EOOFError:没有内建输入,到达EOF标记
IOError:输入/输出操作失败
检测和处理异常
try-excep语句
定义了进行异常监控的一段代码,并且提供了处理异常的机制
try:
try_suite(监控这里的异常)
except Exception[,reason]:
excep_suite(异常处理代码)
#!/usr/bin/env python
示例:
try:
num = int(raw_input('number:'))
result = 100 /num
print result
except ValueError:
print 'Invalid operation.'
带有多个expect的try语句
可以把多个except语句链接在一起,处理一个try块中可能发生的多种异常
#!/usr/bin/env python
try:
data = int(raw_input('input a number:'))
except KeyboardInterrupt:
print 'user cancelled.'
except ValueError:
print 'you must input a number!'
else:
print data
finally:
print 'done.'
触发语句
raise语句:
要想引发异常,最简单的形式就是输入关键字raise,后面要跟要引发的异常的名称
执行raise语句时,python会创建制定的异常类的一个对象
raise语句还可可以指定对异常对象进行初始化的参数
断言:
断言是一句必须等价于布尔值为真的判定,此外,发生异常也意味者表达式为假
实例:
!/usr/bin/env python
def set_age(name,age):
if not 1 <+ age < 150:
raise ValueError, 'age out of range.'(raise语句)
print '%s is %s years old.' % (name,age)
def set_age2(name,age):
assert 1 <= age <150, 'age out of range.'(断言)
print '%s is %s years old.' % (name,age)
if __name__ == '__main__':
set_age('hydra',20)
set_age2('alice',200)
——————————————————————————————————————————————————————————————————
re模块
match函数
尝试用正则表达式模式从字符串的开头匹配,如果匹配成功则返回一个匹配对象
否则返回none
>>> import re(导入模块)
>>> re.match('foo','food')(匹配成功)
<_sre.SRE_Match object at 0x7fa02fd06b90>
>>> print re.match('foo','seafood')(匹配失败)
None
search函数
在字符串中查找正则表达式的第一次出现,如果匹配成功则返回一个匹配对象
否则返回None
>>> m = re.search('foo','seafood')
>>> print m
<_sre.SRE_Match object at 0x7fa02fd06bf8>
group方法
使用match或search匹配成功后,返回的匹配对象可通过group方法获得匹配内容
>>> print m.group()
foo
compile函数
对正则表达式模式进行编译,返回一个正则表达式对象
不是必须要用这种方式,但是可在大量匹配的情况下可以提升效率
>>> patt = re.compile('foo')
>>> m = patt.match('food')
>>> print m.group()
foo
split方法
根据正则表达式中的分割符把字符分割为一个列表,并返回成功匹配的列表
字符串也有类似的方法,但是正则表达式更加灵活
>>> import re
>>> mylist = re.split('\.|-','hello-word.data')(使用.和- 作为字符串的分割符)
>>> print mylist
['hello', 'word', 'data']
sub方法
把字符串中所有匹配正则表达式的地方替换成新的字符串
>>> print re.sub('x','mr.smith', 'hi, x.\nNice to meet you x')
hi, mr.smith.
Nice to meet you mr.smith
——————————————————————————————————————————————————————
正则表达式
匹配单个字符
.:匹配任意字符(换行符除外)
[...x-y...]:匹配字符组里的任意字符
[^...x-y...]:匹配不在字符组里的任意字符
\d:匹配任意数字
\w:匹配任意数字 字母 字符
\s:匹配空白字符与[\r\v\f\t\n]同义
匹配一组字符
literal:匹配字符串的值
re1|re2:匹配正则表达式re1或re2
*:匹配前面出现的正则表达式零次或多次
+:匹配前面出现的正则表达式一次或多次
?:匹配前面出现的正则表达式零次或一次
{M,N}:匹配前面出现的正则表达式至少M次最多N次
其他元字符
^:匹配字符串的开始
$:匹配字符串的结尾
\b:匹配单词的边界
():对正则表达式分组
\nn:匹配已保存的子组
贪婪匹配
* , + 和?都是贪婪匹配操作符,在其后加上?可以取消其贪婪匹配行为
正则表达式匹配对象通过groups函数获取子组
>>> data = 'you phone number is: 1520029989'
>>> m = re.search('.+(\d)', data)
>>> m.group()
'you phone number is: 1520029989'
实例:编写一个apache日志分析脚本
#!/usr/bin/env python
import re
def count_patt(fname,patt):
cpatt = re._compile(patt)
result = {}
with open(fname) as fobj:
for line in fobj:
m = cpatt.search(line)
if m:
key = m.group()
result[key] = result.get(key,0) + 1
return result
if __name__ == '__main__':
http_log = '/var/log/httpd/access_log'
ip_addr = '(\d+\.){3}\d+'
br_patt = 'Firefox|MSIE'
print count_patt(http_log,ip_addr)
print count_patt(http_log,br_patt)
——————————————————————————————————————————————————————————————————
多线程
在多线程(MT)编程出现之前,电脑程序的运行由一个执行序列组成执行序列在主机的中央处理器中运行
无论是任务本身要求顺序执行还算整个程序是由多个子任务组成,程序都是按照这种方式执行的
即使子任务相互独立,无相无关时也是这样
如果运行这些相互独立的子任务可以大幅度地提升整个任务的效率
他们本质就是异步的,需要有多个并发事物
各个事物的运行顺序可以是不确定的,随机的
这样的编程任务可以被分成多个执行流,每个流都有一个要完成的目标
根据应用的不同,这些子任务可能要计算出一个中间结果,用于合并得到最后的结果
线程一般是并发执行的,正是由于这种并行和数据共享机制使得多个任务的合作变为可能
需要注意的是,在单个cpu的系统中,真正的并发是不可能的
每个线程会被安排成每次之运行一小会,然后就把cpu让出来,让其他线程去运行
多线程编程
thread和threading模块允许程序员创建和管理线程
thread模块提供了基本的线程和锁的支持,而threading提供了更高级别,功能更强的线程管理功能
推荐使用更高级别的threading模块
实例:编写多线程扫描192.168.4.0网段的存活主机
#!/usr/bin/env python
import subprocess
import threading
def ping(host):
result = subprocess.call(
"ping -x2 %s &> /dev/null" % host, shell=True
)
if result == 0:
print "%:up" % host
else:
print "%s:down" % host
if __name__ == '__main__':
ips = ['192.168.4.%s' %i for i in range(1,255)]
for ip in ips:
t = threading.Thread(target=ping,args=[ip])
t.start()
————————————————————————————————————————————————————————————————
paramiko模块
安装paramiko模块(安装后重启pycharm)
[root@room1pc01 ~]# yum -y install gcc gcc-c++ python-paramiko
实例:编写多线程链接多主机执行命令
#!/usr/bin/env python
import sys
import paramiko
import os
import getpass
import threading
def remote_comm(host,pwd,comm):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect(host,username='root',password=pwd)
stdin, stdout, sterr = ssh.exec_command(comm)
out = stdout.read()
err = sterr.read()
if out:
print "[%s]out:\n%s" % (host, out)
if err:
print "[%s]error:\n%s" % (host, err)
ssh.close()
if __name__ == '__main__':
if len(sys.argv) !=3:
print "usage: %s ipfile 'command'" % sys.argv[0]
sys.exit(1)
if not os.path.isfile(sys.argv[1]):
print "no such file:", sys.argv[1]
sys.exit(2)
ipfile = sys.argv[1]
comm = sys.argv[2]
passwd = getpass.getpass("passwoed: ")
with open(sys.argv[1]) as fobj:
for line in fobj:
ip = line.strip()
t = threading.Thread(
target=remote_comm,args=(ip, passwd, comm)
)
t.start()
[root@room1pc01 ~]# python ssh.py ipaddr.txt ls/root/(执行脚本 ip地址池 执行的命令)
python 常见错误和异常 函数 正则表达式及多线程编程的更多相关文章
- python常见错误和异常
1.BaseExeception 所有异常的基类 2.SystemEixt 解释器请求退出 3.KeyboardInterrupt 用户中断执行 4.Exception 常规错误的基类 5.StopI ...
- python的错误和异常
python错误和异常 错误 错误分为语法错误和逻辑错误 语法错误 >>> if File "<stdin>", line 1 if ^ Syntax ...
- Python 常见文件操作的函数示例(转)
转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...
- Python常见文件操作的函数示例
# -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...
- python 常见的内置函数
内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...
- python之错误和异常
错误 分为语法错误和逻辑错误,如下: 语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器编译. 逻辑错误可能是由于不完整或是不合法的输入所致,或者是无法生成.计算.或是输出结果需要的过程无法 ...
- python常见错误
最近刚刚接触Python,为了养成好习惯,遇到了诸多的问题,林林总总,在这里简单记录下: 编写简单的python语句时: module level import not at top of file ...
- 【python+selenium学习】Python常见错误之:IndentationError: unexpected indent
初入python+selenium学习之路,总会遇到这样那样的问题.IndentationError: unexpected indent,这个坑我已经踏进数次了,索性记录下来.都知道Python对代 ...
- python常见错误总结
TypeError: 'module' object is not callable 模块未正确导入,层级关系没找对 缩进错误. IndentationError: unindent does not ...
随机推荐
- nodejs爬虫笔记(五)---利用nightmare模拟点击下一页
目标 以腾讯滚动新闻为例,利用nightmare模拟点击下一页,爬取所有页面的信息.首先得感谢node社区godghdai的帮助,开始接触不太熟悉nightmare,感觉很高大上,自己写代码的时候问题 ...
- Shell脚本中使用function(函数)示例
这篇文章主要介绍了Shell脚本中使用function(函数)示例,本文着重讲解的是如何在shell脚本中使用自定义函数,并给出了两个例子,需要的朋友可以参考下 函数可以在shell script ...
- Docker之容器
容器(Container) 容器介绍: docker是通过容器来运行业务的,就像运行一个kvm虚拟机是一样的.容器其实就是从镜像创建的一个实例. 我们可以对容器进行增删改查,容器之间也是相互隔离的.和 ...
- 精通libGDX-RPG开发实战
从今天开始,我会陆陆续续做一个五脏俱全的rpg小品游戏. 素材使用<圣剑英雄传II>的素材 游戏名称< Inspiration > 教程目录(暂定): Chapter 1: 开 ...
- Trusted Execution Technology (TXT) --- 度量(Measurement)篇
版权声明:本文为博主原创文章,未经博主允许不得转载.http://www.cnblogs.com/tsec/p/8413537.html 0. 导读 TXT基本原理篇介绍了TXT安全度量的基本概念,包 ...
- IDEA Tomcat:Failed to initialize end point associated with ProtocolHandler
发现Tomcat的日志中出现这样的错误,一般都是端口被占用了.在任务管理器中检查是否有其他的应用在使用该端口 Failed to initialize end point associated wit ...
- XBIM 基于 WexBIM 文件在 WebGL 浏览和加载
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- qt中的事件机制
事件 1.QEvent -->类型 -> QKeyEvent QEvent::KeyRelease QEvent::MouseMove -> QMouseEvent 2.事件处理过程 ...
- WPF---Xaml中改变ViewModel的值
在开发中遇到实现如下需求的情景:一个输入框,旁边一个清空输入的按钮,当输入框中有内容时显示清空按钮,点击该按钮可以清空输入框内容,当输入框中无内容时隐藏按钮 当然这个需求使用wpf的绑定功能很容易实现 ...
- jenkins中使用rsync, scp命令
jenkins 中使用 rsync 命令 是出现一些错误输出 Host key verification failed. rsync: connection unexpectedly closed ( ...