Python - try/except异常处理机制

异常处理

异常是指python在运行过程中出现错误从而产生一个traceback(关于错误的一个具体描述)。
异常处理是指不增加额外的代码和逻辑来避免问题的产生,而通过在发现异常后执行回复代码,从而继续执行程序。

try/except 机制

try/except提供了一个异常处理机制,从而保护可能导致运行错误的某些代码行。

try:
	#在这里输入正常情况下执行的代码
	
except:
	#在try发生错误的时候执行的恢复代码
	pass 
	#pass 是 python 的空语句,表示什么也不做

特定指定异常

当异常处理代码设计为处理一种特定类型的错误 ,例如格式错误,输出输入错误等,并输出相应的错误警告时,一定要在except上指定错误类型。

try:
	#代码
	
#指定异常可以产生多个异常处理代码except
except IOError as e:
	print(e)
	
except ValueError as e:
	print(e)
	# 将错误情况赋值给e并输出。
	
except Exception as e:
	print(e)
	# 所有异常处理情况

常见异常:

  1. IOError:文件打开错误,例如文件不存在 或 权限问题。
  2. ValueError: 值错误,例如int(‘hello’),可以接受字符串,但是hello不具备整数含义。
  3. TypeError:类型错误,例如不支持类型的操作,与ValueError相区别。
  4. IndexError:索引错误,例如列表地址越界。
  5. KeyError:键值错误,例如字典中不存在的键。
  6. NameError:命名错误,例如未定义标识符。
  7. IndentationError: 缩进错误。
  8. SyntaxError:语法错误。

习惯使用finally

在一些情况下,例如当尝试对文件进行修改

try:
	out1 = open('test1.txt,'w')
	out2 = open('test2.txt,'w')
	print("test txt",file = out1)
	print("test txt",file = out2) 
	out1.close()
	out2.close()
	
except IOError as e: 
	print('File error' + str(e))

在上述代码中,如果在上面的第二个print发生错误时,将无法正常执行文件的关闭操作,可能会导致写入的数据被破坏。因此可以使用finally对try进行拓展。

try:
	out1 = open('test1.txt,'w')
	out2 = open('test2.txt,'w')
	print("test txt",file = out1)
	print("test txt",file = out2) 

except IOError as e: 
	print('File error' + str(e))

finally:
	out1.close()
	out2.close()

不管发生什么情况,都会执行finally中的代码,从而减少文件数据被破坏的可能性。

with处理文件

在这种情况下,如果发生文件并未打开,则会在finally中关闭文件的时候产生错误。
可以通过增加判断或另一个异常处理

try:
	out1 = open('test1.txt,'w')
	
finallyif 'out1' in locals():
		out1.close()
try:
	out1 = open('test1.txt,'w')
	
finallytry:
		out1.close()
	except:
		pass

除此之外,python提供了with语句来减少代码量,with是哦那个了上下文管理协议,不再需要操心关闭打开的文件。

try:
	with open('test1.txt,'w') as out1:
		print("test txt",file = out1)
		
except IOError as e: 
	print('File error' + str(e))

异常处理与逻辑上的避免

逻辑避免是指利用类似于if等额外语句从而避免发生错误的情况,但是会增加代码的复杂性,而且需要不停的调试代码,规避各种可能出现的错误。
异常处理也可以增加代码的健壮性,而且避免了大量的判断语句,增加了可读性。

猜你喜欢

转载自blog.csdn.net/seek0226/article/details/107332057