七、异常处理

1.声明异常语法规则

  • try-finally语句

try:
    检测范围
except Exception[as reason]:
    出现异常(Exception)后的处理代码
finally:
    无论如何都会被执行的代码

一个 try 语句可以和多个 except 语句搭配,因为 try 语句块中可能出现多类异常,利用多个 except 语句可以分别捕获并处理我们感兴趣的异常。

except (OSError, TypeError, ValueError) as reason:
  print('出错了\n错误原因是:' + str(reason))
  • raise语句

用于声明一个异常

>>> raise ZeroDivisionError('除数为零的异常')
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    raise ZeroDivisionError('除数为零的异常')
ZeroDivisionError: 除数为零的异常

实例:尝试一个新的函数 int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入

def int_input(prompt=''):
	while True:
		try:
			int(input(prompt))
			break
		except ValueError:
			print('出错,您输入的不是整数!')

int_input("请输入一个整数:")

2.else语句和with语句的运用

  • else语句

  • 用法一:
if a>b:
    print(a)
else:
    print(b)
  • 用法二:
#******************************************#
#  判断给定数的最大公约数,如果是素数,则打印  #
#******************************************#
def showMaxFactor(num):
	count = num//2
	while count > 1:
		if num % count == 0:
			print('%d最大的约数是%d' %(num,count))
			break
		count -= 1
	else:
	# 只有循环完成后才执行,如果循环中执行使用到break,则else不执行
		print('%d是素数!' %num)

num = int(input('请输入一个数:'))
showMaxFactor(num)
  • 用法三
try:
	print(int('abc'))
except ValueError as reason:
	print('出错啦:' + reason)
else:
	# 如果没有出错
	print('没有任何异常!')
  • with语句

with context_expression [as target(s)]:
    with-body
#**********************************#
#   异常处理配合with语句     	   #
#	可以避免已打开文件没关闭的情况    #
#**********************************#
try:
	with open('data.txt', 'w') as f:
		for each_line in f:
			print(each_line)
except OSError as reason:
	print('出错啦:' + str(reason))

 

3.Python标准异常总结

异常名称解释
AssertionError

断言语句(assert)失败:当assert关键字后边的条件为假时,程序将抛出该异常,一般用于在代码中置入检查点

>>> my_list = ['hello world']

>>> assert len(my_list) > 0 # 此时程序无反应

>>> my_list.pop()

>>> assert len(my_list) > 0 # 此时抛出异常AssertionError

AttributeError

尝试访问未知的对象属性:当试图访问的对象属性不存在时抛出的异常

>>> my_list.fishc

抛出异常 AttributeError: 'list' object has no attribute 'fishc'

EOFError这个错误基本上是意味着它发现了一个不期望的文件尾。(UNIX上为Ctrl+d,Windows上为Ctrl+Z+Enter)
FloatingPointError浮点计算错误
GeneratorExitGengeator.close()方法被调用的时候
ImportError导入模块失败的时候
IndexError索引超出序列的范围
KeyError字典中查找一个不存在的关键字
KeyboardError用户输入中断键(Ctrl+c)
MemoryError内存溢出(可通过删除对象释放内存)
NameError尝试访问一个不存在的变量
NotImplementedError尚未实现的方法
OSError操作系统产生的异常(例如打开一个不存在的文件)
OverflowError数值运算超出最大限制
ReferenceError弱引用(weak reference)试图访问一个已经被垃圾回收几只回收了的对象
RuntimeError一般的运行时错误
StopIteration迭代器没有更多的值
SyntaxErrorPython的语法错误
IndentationError缩进错误
TabErrorTab和空格混合使用
SystemErrorPython编译器系统错误
SystenExitPython编译器进程被关闭
TypeError不同类型间的无效操作
UnboundLocalError访问一个未初始化的本地变量(NameError的子类)
UnicodeErrorUnicode相关的错误(ValueError的子类)
UnicodeEncodeErrorUnicode编码时的错误(UnicodeError的子类)
UnicodeDecodeErrorUnicode解码时的错误(UnicodeError的子类)
UnicodeTranslateErrorUnicode转换时的错误(UnicodeError的子类)
ValueError传入无效的参数
ZeroDivisionError除数为零



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛江清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值