08-error-exception

AffettoIris 2023-2-23 2,260 2/23

错误和异常

错误是

if 1 > 2  # 少个:
    print(‘1’)

异常是

print(undefinedvar)

异常处理

try:
    pass
except NameError as err:
    print(err) # name 'num' is not defined
    print(NameError) # <class 'NameError'>
except ValueError as err:
    print("ValueError")
except Exception as e:
    # 很多错误说是UnExceptedError,就是因为上面的except具体的error不写全,才在这儿统一为UnExceptedError
    print(e)
    pass

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:

except (RuntimeError, TypeError, NameError):
    pass

其实上面的try except还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。else 子句将在 try 子句没有发生任何异常的时候执行。例如:

# 在 try 语句中判断文件是否可以打开,如果打开文件时正常的没有发生异常则执行 else 部分的语句,读取文件内容try:
    f = open(file, 'r')
except:
    print('cannot open', file) # 会输出cannot open file
else:
    print(file.readlines())
    f.close()

其实上述try except else还可以在else后加上finally,无论是否发生异常都将执行最后的代码。

抛出异常

x = 10
if x > 5:
    raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
    # 必须是一个异常的实例或者是异常的类(也就是 Exception 的子类

raise后面跟的要被抛出的异常必须是一个异常的实例或者是也就是 Exception 的子类。如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

try:
    raise NameError('HiThere')  # 模拟一个异常。
except NameError:
    print('An exception flew by!')
    raise # NameError('HiThere')再次抛出
print(1) # 不被执行

用户自定义异常

你可以通过直接继承或间接继承Exception 类来创建一个自定义的异常类来拥有自己的异常。

不细看了。不用python上班、写小脚本八辈子用不到

try except finally执行顺序

如果try里有Exception被抛出,而又没有任何的 except 把它截住,那么会优先执行finally再抛出异常:

try:
    raise KeyboardInterrupt
finally:
    print('Goodbye, world!')
# Goodbye, world!
# Traceback (most recent call last):  File "<stdin>", line 2, in <module>KeyboardInterrupt

其他情况则是顺序发生。

- THE END -

AffettoIris

10月16日15:57

最后修改:2023年10月16日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论