一、错误和异常

Python有两种错误很容易辨认:语法错误和异常。
1.语法错误
2.异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 如 ZeroDivisionError,NameError 和 TypeError。 二、异常处理

1.
	import sys
	try:
	    f = open('myfile.txt')
	    s = f.readline()
	    i = int(s.strip())
	    
	#第一种异常
	except OSError:
	    print("OS error: {0}".format(OSError))
	
	#第二种异常
	except ValueError:
	    print("Could not convert data to an integer.")
	
	#第三种异常可以忽略异常的名称,它将被当作通配符使用
	except:
	    print("Unexpected error:", sys.exc_info()[0])
	
	#没有出现异常时最后执行    
	else:
	    print("没有出现异常")  
	 
	#最后必须执行   
	finally:
	    print("最后必须执行") 
	    
2.第三种异常可以忽略异常的名称,它将被当作通配符使用,sys.exc_info()[0]可以获得异常的类型
	except:
	    print("Unexpected error:", sys.exc_info()[0])	      

3.一次性处理多个异常
	except (RuntimeError, TypeError, NameError):
   		pass

**4。使用traceback(推荐),自动收集异常信息

import traceback
try :
	a = 1 / 0
except:
	traceback.print_exc()

三、抛出异常

raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。
try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    raise 四、自定义异常

你可以通过创建一个新的exception类来拥有自己的异常。异常应该继承自 Exception 类,或者直接继承,或者间接继承

1.定义
class MyError(Exception):
	def __init__(self, value):
		self.value = value
	def __str__(self):
		return repr(self.value)

2.使用
	try:
		raise MyError(2*2)
	except MyError as e:
		print('My exception occurred, value:', e.value)

五、定义清理行为

finally:
    print('Goodbye, world!')

六、预定义的清理行为

with open("myfile.txt") as f:
for line in f:
    print(line, end="")

文章信息

张雪随笔
master
Homepage
Issues
Download

This Software is under the terms of The Unlicense.