异常类型:
Exception
: 所有异常的基类。
SystemExit
, KeyboardInterrupt
: 退出程序或中断执行。
GeneratorExit
: 生成器抛出的异常。
StopIteration
: 迭代器耗尽时抛出。
TypeError
: 类型错误,如尝试使用不正确的函数参数类型。
ValueError
: 值错误,如传入函数的参数不在指定范围内。
IndexError
: 索引错误,如尝试访问列表中不存在的索引。
ZeroDivisionError
: 除以零的错误。
NameError
: 尝试访问未定义的变量。
异常处理细节:
捕获特定异常:你可以指定一个或多个异常类型,以便只捕获那些特定的异常。
捕获所有异常:使用except:
可以捕获所有未被前面except
捕获的异常。
异常传递:如果你不想处理一个异常,可以使用raise
关键字再次抛出它。
finally语句:finally
子句中的代码会在try
块执行完毕后执行,无论是否发生异常。它通常用于清 理工作,如关闭文件。
异常嵌套:可以在一个except
块内部使用另一个try...except
块来捕获更具体的异常。
自定义异常:可以通过定义一个继承自Exception
的新类来创建自定义异常
注意事项
try
块至少包含一个except
或finally
子句。- 在捕获异常时,不要捕获所有异常(如
Exception
),除非你真的想捕获所有异常。 - 在处理异常时,要避免将异常隐藏起来,因为这可能会导致问题难以追踪。
- 使用异常要谨慎,不要滥用,因为它们可能会使代码的意图变得不明确。
下面是一个代码示例
while True:
a = input("请输入三角形三边:")
b = input()
c = input()
try:
a = float(a)
b = float(b)
c = float(c)
assert a + b > c
assert b + c > a
assert a + c > b
print('三边可以构成三角形')
except ValueError:
print("必须输入数字")
except AssertionError:
print("不能构成三角形")
else:
break
finally:
if a + b < c or b + c < a or a + c < b:
print("请再输一遍")
else:
print("恭喜你成功了")