语法:
try:
...
except 异常名称 :
...
finally:
...
l = []
try:
# print(c) # NameError
# l[10] # IndexError
# print(10/0) # ZeroDivisionError
# 1 + 'hello' # TypeError
except NameError:
# 如果except后不跟任何的内容,则此时它会捕获到所有的异常
# 如果在except后跟着一个异常的类型,那么此时它只会捕获该类型的异常
print('出现 NameError 异常')
except ZeroDivisionError:
print('出现 ZeroDivisionError 异常')
except IndexError:
print('出现 IndexError 异常')
# Exception 是所有异常类的父类,所以如果except后跟的是Exception,他也会捕获到所有的异常
# 可以在异常类后边跟着一个 as xx 此时xx就是异常对象
except Exception as e:
print('未知异常', e, type(e))
# 未知异常 unsupported operand type(s) for +: 'int' and 'str' <class 'TypeError'>
finally:
print('无论是否出现异常,该子句都会执行')
raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例
class MyError(Exception):
pass
def add(a, b):
# 如果a和b中有负数,就向调用处抛出异常
if a < 0 or b < 0:
# raise用于向外部抛出异常,后边可以跟一个异常类,或异常类的实例
# raise Exception
# raise Exception('两个参数中不能有负数!')
raise MyError('自定义的异常')
# 也可以通过if else来代替异常的处理
# return None
r = a + b
return r
print(add(-123, 456))
# output:
# __main__.MyError: 自定义的异常
file_name = 'demo.txt'
try:
with open(file_name) as file_obj :
print(file_obj.read())
except FileNotFoundError:
print(f'{file_name} 文件不存在~~')
使用open()打开文件时必须要指定打开文件所要做的操作(读、写、追加)
r 表示只读的
r+ 即可读又可写,文件不存在会报错
w 表示是可写的,使用w来写入文件时,如果文件不存在会创建文件,如果文件存在则会截断文件(截断文件指删除原来文件中的所有内容)
w+ 可读写,会清空文件内容,文件不存在不会报错,会创建新的文件并写入
a 只能写,文件不存在,不报错,不会清空文件内容
a+ 可读写,文件不存在,不报错,不会清空文件内容
x 用来新建文件,如果文件不存在则创建,存在则报错