当前位置: > > > Python - 异常处理详解(附:触发异常、自定义异常)

Python - 异常处理详解(附:触发异常、自定义异常)

    异常是 Python 对象,表示一个错误。一般情况下,在 Python 无法正常处理程序时就会发生一个异常。当 Python 脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

1,异常处理

(1)捕捉异常可以使用 try...except 语句,其中 except 后面为异常类型:
try:
    f = open("hangge", "r")
    print(f.read())
except IOError:
    print("Error: 没有找到文件或读取文件失败")

(2)try....except...else 语句表示如果 try 子句执行时没有发生异常,python 将执行 else 语句后的语句,然后控制流通过整个 try 语句:
try:
    f = open("hangge.txt", "r")
    print(f.read())
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("读取成功!")

(3)try...finally 语句无论是否发生异常都将执行最后的代码:
try:
    f = open("hangge", "r")
    print(f.read())
except IOError:
    print("Error: 没有找到文件或读取文件失败")
finally:
    print("无论是否异常,都会执行")

(4)我们可以给异常可以带上参数,可作为输出的异常信息参数:
try:
    f = open("hangge", "r")
    print(f.read())
except IOError as e:
    print("发生异常:")
    print(e)

(5)except 异常分支可以有多个,当发生异常时会从上到下依次进行匹配,只执行最先匹配的一个 except
try:
    f = open("hangge", "r")
    print(f.read())
except FileNotFoundError:
    print("无法打开指定的文件!")
except IOError:
    print("读取文件发生错误!")

(6)可以相同的 except 语句来处理多个异常信息:
try:
    f = open("hangge", "r")
    print(f.read())
except(FileNotFoundError, IOError):
    print("没有找到文件或读取文件失败")

(7)我们也可以不带任何异常类型使用 except
try:
    f = open("hangge", "r")
    print(f.read())
except:
    print("没有找到文件或读取文件失败")

2,手动触发异常

(1)我们可以使用 raise 语句自己触发异常:
def test( level ):
    if level < 1:
        raise Exception("Invalid level!")
        # 触发异常后,后面的代码就不会再执行
        print("Invalid level:", level)
    else:
        print("Level:", level)

try:
    test(0)
except Exception as e:
    print("发生异常:")
    print(e)

(2)异常参数可以写多个:
def test( level ):
    if level < 1:
        raise Exception("Invalid level!", level, '@@@')
        # 触发异常后,后面的代码就不会再执行
        print("Invalid level:", level)
    else:
        print("Level:", level)

try:
    test(0)
except Exception as e:
    print("发生异常:")
    print(e)

3,自定义异常

    我们可以创建一个新的异常类实现自定义异常,比如下面样例创建了一个名为 iNetworkError 的异常类,其基类为 RuntimeError
#自定义异常类
class NetworkError(RuntimeError):
    def __init__(self, arg):
        self.args = arg

#自定义异常类的使用
try:
    raise NetworkError("Bad hostname")
except NetworkError as e:
    print("发生异常:")
    print(e)
评论0