1. 什么是异常
跟java异常(Exception)一样,都是指在程序执行过程中发生的错误或异常情况。当程序出现异常时,会中断正常的执行流程,并转而执行异常处理的逻辑。
2. 什么情况下触发异常
异常可以由多种原因引起,例如:
- 语法错误:代码不符合Python语法规则。
- 运行时错误:在代码执行期间发生了错误,如除零错误、索引错误等。
- 逻辑错误:程序逻辑错误导致了异常情况,如值错误、类型错误等。
当遇到异常时,Python会抛出相应的异常对象。
这些异常对象属于异常类的实例,它们包含有关异常的相关信息,如异常类型和错误消息。
通过捕获和处理这些异常,我们可以更好地控制程序的流程,并提供适当的错误处理机制。
3. 异常的处理
异常处理通常使用try-except
语句来实现。在try
块中,放置可能引发异常的代码;在except
块中,指定要处理的异常类型,并提供相应的处理逻辑。如果没有匹配的except
块,异常将被传递给上层调用栈,直到找到匹配的异常处理器或程序终止。
try: # 可能会引发异常的代码 result = 10 / 0 # 除以零会引发 ZeroDivisionError 异常 print("这行代码不会被执行") except ZeroDivisionError: # 处理 ZeroDivisionError 异常 print("除零错误发生") print("异常捕获,处理完成后继续执行") # 输出: # 除零错误发生 # 异常捕获,处理完成后继续执行
4. 异常处理程序-try-except
4.1 一个除数为0的错误
1 def division(x, y): 2 return x / y 3 4 5 print(division(8, 6)) # 1.3333333333333333 6 ''' 7 Traceback (most recent call last): 8 File "F:\python\base\base\037异常\异常01-一个除数为0的错误.py", line 6, in <module> 9 print(division(5, 0)) 10 ^^^^^^^^^^^^^^ 11 File "F:\python\base\base\037异常\异常01-一个除数为0的错误.py", line 2, in division 12 return x / y 13 ~~^~~ 14 ZeroDivisionError: division by zer 15 ''' 16 print(division(5, 0)) # 报错 17 18 print(division(6, 3)) # 报错后,程序终止,此句未执行
当一个程序发生了异常,程序就会将异常传递给上层调用栈,直到找到匹配的异常处理器或程序终止。如果没有处理线程或程序将会终止。
4.2 语法
1 try: 2 # 可能会引发异常的代码块 3 # ... 4 except 异常类: # 如果没有异常类,则捕获所有异常 5 # 异常处理代码
1 def division(x, y): 2 try: 3 return x / y 4 except ZeroDivisionError: 5 print("除数不可为0") 6 7 8 print(division(8, 6)) # 1.3333333333333333 9 print(division(5, 0)) # 报错被捕获,但函数还是有返回值,为None 10 11 print(division(6, 3)) # 异常被捕获处理,程序没有终止,因此此句执行了.输出:2.0
5. 异常处理-try-except-else
5.1 语法
1 try: 2 # 可能会引发异常的代码块 3 # ... 4 except ExceptionType1: # 如果没有异常类,捕获所有的异常 5 # 处理 ExceptionType1 类型的异常的代码 6 # ... 7 else: 8 # 在没有引发异常时执行的代码块
def division(x, y): try: result = x / y except ZeroDivisionError: print("除数不可为0") else: # 程序无异常,返回结果 print("程序无异常发生") return result print(division(8, 6)) # 1.3333333333333333 print(division(5, 0)) # 报错被捕获,但函数还是有返回值,为None print(division(6, 3)) # 异常被捕获处理,程序没有终止,因此此句执行了.输出:2.0 ''' 输出: 1.3333333333333333 除数不可为0 None 程序无异常发生 2.0 '''
else块(可选):在try块中的代码没有引发任何异常时执行的代码块。
else语句场景:
-
需要处理异常以外的代码逻辑:
else
块中的代码会在try
块中的代码没有引发任何异常时执行。这样可以将正常的代码逻辑放在else
块中,而将异常处理逻辑放在except
块中,使代码更加清晰和可读。 - 异常处理与成功处理分离:else块中的代码只会在没有异常发生时执行,因此可以将对于异常情况的处理与正常情况的处理分离开来,提高代码的可读性和可维护性。
标签:division,代码,基础,except,try,print,异常 From: https://www.cnblogs.com/allenxx/p/17572528.html