python异常处理实例教程(捕捉异常、错误)

时间:2021-10-18 00:05:46
#一个最简单的异常捕捉(int 和 str 不能做+ )
try:
print("aaa"+2)
except:
print("Error!\n")

#以下接收具体错误类型,
#"TypeError""ZeroDivisionError"都是基类Exception的成员,
#并且定义变量e用于接收具体错误信息,
#以显示更多关于异常的信息。
#把"a"换做0,1
try:
r=10/"a"
print("result",r)
except TypeError as e:
print("TypeError:",e,"\n")
except ZeroDivisionError as e:
print("ZeroDivisionError:",e,"\n")
else:
print("no error!")

#以下创建一个新的异常类,继承自Exception类
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(824)
except MyError as e:
print('My exception occurred, value:', e.value,'\n')

#触发自定义异常
filename = input('please input a file name:')
if filename=='hello':
raise NameError('input file name error! No hello here!')

#以下是try...except和try...finally两种语句的执行规则
''' 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。
如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。
如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。
如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
如果没有发生异常,则执行else块代码。'''
''' 执行try下的代码。
如果发生异常,在该异常传递到下一级try时,执行finally中的代码。
如果没有发生异常,则执行finally中的代码'''

#补充一点关于try...finally
'''try...finally...子句用来表达这样的情况:
不管捕捉到的是什么错误,无论错误是不是发生,
这些代码“必须”运行,比如文件关闭等。以下是一个实例: '''
'''try:
fh = open("testfile", "w")
try:
fh.write("这是一个测试文件,用于测试异常!!")
finally:
print("关闭文件")
fh.close()
except IOError:
print("Error: 没有找到文件或读取文件失败")'''
'''当在try块中抛出一个异常,立即执行finally块代码。
finally块中的所有语句执行后,异常被再次触发,并执行except块代码。
在这个例子中可以看出finally的用处,并不是“怎样都会运行所以没有用的东西”。'''

#最后一个小总结
'''Python的异常处理能力是很强大的,可向用户准确反馈出错信息。
在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。
所有异常都从基类Exception继承,而且都在exceptions模块中定义。
Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。
一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。
异常处理就是为了捕捉异常返回有用信息而不程序执行终止的操作'''


内容集合了知乎和各博客,也有一丁点自己补的......找不出来源了。