在Python中,异常处理是一种重要的编程结构,它允许你在代码运行时检测并响应错误或异常情况。异常处理使得程序在遇到错误时能够优雅地处理这些错误,而不是直接崩溃或终止执行。
下面是根据代码示例来说明:
input_str1 = input("输入数字1:")
input_str2 = input("输入数字2:")
try:
input_value1 = int(input_str1)
input_value2 = int(input_str2)
print(f"输入的数字1是:{input_value1}")
print(f"输入的数字2是:{input_value2}")
print(f"数字1除以数字2的结果为:{input_value1 / input_value2}")
except ValueError as e:
print(f"数值异常", e)
except TypeError as e:
print(f"类型异常", e)
except ZeroDivisionError as e:
print(f"除数为零异常", e)
except Exception as e:
print(f"未知异常", e)
else:
print(f"没有发现异常")
finally:
print(f"有没有异常都会执行")
print("程序正常结束")
常见的异常有 ValueError TypeError ZeroDivisionError Exception(可以捕获所有异常,但不提示是什么类型的异常)
try 语句按照如下方式工作:
-
首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
-
如果没有异常发生,忽略 except 子句,try 子句执行后结束。
-
如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
如果input_str1或input_str2不为数字,会触发ValueError,如果input_str2为0,会触发除ZeroDivisionError。其中else语句在没有触发异常时才执行,finally语句有没有触发异常都会执行。
特别的,用户还可以自定义异常处理:
class LTOne(Exception):
def __init__(self, msg):
super().__init__(msg)
while True:
input_str = input("输入一个正整数:")
# 这个try except 用来捕获强转为整型时的异常
try:
input_value = int(input_str)
# 这个try except 用来捕获用户自定义的数值小于1的异常
try:
if input_value < 1:
# 抛出异常,并自定义提示信息
raise LTOne("输入数值小于1")
except LTOne as e:
print(f"触发用户自定义LTOne异常", e)
break
except ValueError as e:
print(f"数值异常", e)
break