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 -
最后修改:2023年10月16日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.ink0.cn/index.php/2023/02/23/08-error-exception/
共有 0 条评论