实践杂谈(3)—— Python实用技巧(一)
2014-11-27 06:37
531 查看
1. 异常处理
异常处理(exception handling)是编程中的一项重要技巧,也是容易被人忽视的一项。我们常常会忽视异常处理的重要性:它能使程序变得更具有鲁棒性,减少程序发生严重突发问题的几率,也能使程序更易于调试。尤其是在以下几种情况下,更应该善用异常处理:进行网络访问时
进行I/O读写时
执行某些复杂、容易造成程序崩溃的程序段时
总之,希望大家看完本文的介绍后,跟博主一起养成使用异常处理技术的好习惯吧。
Python 中使用 try ... except ... 实现异常处理。当 try 程序段中的程序出现异常时,便会开始执行except程序段。以下是一个例子:
try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully" fh.close()
上述例子还有一个 else 程序段,这是当 try 程序段成功执行之后,转去执行的程序段。
在上述例子中我们还能看到,except 后还能够指定特定的异常类型,如:IO错误:IOError;执行错误:RuntimeError等等。若不指定某一异常类型,则默认为所有异常。
除此之外,我们还可以使用 finally 程序段。与 else 等不同的是,该程序段的内容一定会被执行,不论 try 程序段中是否出现了异常。因此可以放置一些必须执行的程序段。
另外,我们还可以主动地触发一次异常事件:使用 raise 命令。比如:
raise RuntimeError('Here!')为什么我们要自己触发一次异常?这可以用于某些调试场合当中,也可以用于触发一些用户自定义的异常,如下例:
>>> class MyError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) >>> try: raise MyError(2*2) except MyError as e: print 'My exception occurred, value:', e.value My exception occurred, value: 4
上述例子中我们还看到如何自定义一个异常事件:定义一个继承于 Exception 的类,十分简单。
最后,简答总结一下Python有关异常的命令:
try:监测其中程序段是否出现异常
except:若 try 中出现异常则执行
else:若 try 中无异常则执行
finally: 不论 try 中是否异常都执行
raise:触发一个异常
Reference:
http://www.tutorialspoint.com/python/python_exceptions.htm
https://docs.python.org/2/tutorial/errors.html
2. 计数器 —— Counter
接下来我们介绍一个非常好用的工具:collections.Counter。在Python编程当中,我们常常需要统计一个列表当中不同元素的个数。这个任务最直接的办法便是:先用set()得到列表中各个不同的元素,然后再扫描列表统计每个元素的个数。然而,上述步骤未免过于繁琐了,通过collecitions.Counter我们可以轻松完成这个任务。
首先我们需要导入collections模块,之后我们只要使用Counter函数就好了,如下:
>>>import collections >>>l = ['a', 'b', 'a', 'c', 'b', 'a'] >>>c = collections.Counter(l) >>>print c Counter({'a': 3, 'b': 2, 'c': 1})函数返回值是一个Counter类的对象,可以看到十分轻松的就对列表中的词频进行统计。若你觉得对常见的字典 (dictionary) 类型比较熟悉,可以直接使用dict() 将其转为字典类型,十分方便。
除此之外,Counter类还提供了三个有用的函数:
1. elements():返回一个迭代器,将Counter类对象中的元素按照其个数列出来(若该元素个数小于1,则忽略)。该函数可以结合list()使用得到一个列表,如下例:
>>c = Counter(a=4, b=0, c=1, d=-2) >>list(c.elements()) ['a', 'a', 'a', 'a', 'c']
2. most_common(n):返回 n 个频数最高的元素,若不指定n默认为返回全部元素。
3. subtract([iterable-or-mapping]):从对象中减去某些内容,其中可以是能够迭代的类型(如列表),或者是Counter类,如下例:
>>c1 = Counter(a=3, b=1, c=2) >>c2 = Counter(a=1, b=2, c=1) >>c1.subtract(c2) >>c1 Counter({'a'=1, 'b'=-1, 'c'=1})
Reference:
https://docs.python.org/2/library/collections.html
3. 组合——combinations
在一些算法的实现中,我们常常需要的到一个集合的所有子集,即一个集合的 power set。比如,在实现 Apiori 算法的时候,我们需要找到一个pattern的所有子pattern,以确定其中是否有 not frequent 的pattern。为了实现这个功能,我们有一个非常方便的工具——itertools 模块。该模块中有两个非常有用的函数:combinations(r) 和 permutations(r),分别返回的是长度为r 的原集合的所有组合和排列。以下举个例子:
>>> import itertools >>> set = ['a', 'b', 'c', 'd'] >>> itertools.combinations(set, 3) >>> list(c) [('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd')]
相关文章推荐
- Python实用技巧-成为Pythoner必经之路
- 【收藏】Python实用技巧-成为Pythoner必经之路
- 20个超实用的JavaScript技巧及最佳实践
- 20个超实用的JavaScript技巧及最佳实践
- 20个超实用的JavaScript技巧及最佳实践
- Python实用技巧-成为Pythoner必经之路
- 45个实用的JavaScript技巧、窍门和最佳实践
- Python入门之你必须了解的实用技巧
- Python实用技巧-成为Pythoner必经之路
- 20个超实用的JavaScript技巧及最佳实践,转自csdn
- 实用python技巧
- Python实用技巧-成为Pythoner必经之路
- PhotoShop(PS)实践中总结参考线实用技巧文字排版实例教程
- 20个超实用的JavaScript技巧及最佳实践
- 20个超实用的JavaScript技巧及最佳实践
- Python实用技巧
- 20个超实用的JavaScript技巧及最佳实践
- 20个超实用的javascript技巧及最佳实践
- 20个超实用的JavaScript技巧及最佳实践
- 45个实用的JavaScript技巧、窍门和最佳实践