在Python编程中,错误(Errors)和异常(Exceptions)是两种不同类型的运行时问题,但通常都被称为“异常”。理解并正确处理这些异常对于编写健壮和可靠的代码至关重要。
错误(Errors)
错误通常是由于Python解释器或编译器在解析代码时遇到的语法问题,这些问题使得代码无法执行。错误是语法问题,通常会在代码解析时被发现。
例如:
def hello():print("Hello, World!"
运行结果如下:
> python error_demo.pyFile "error_demo.py", line 2print("Hello, World!"^
SyntaxError: '(' was never closed
在这个例子中,由于缺少函数调用括号,Python解释器会抛出一个SyntaxError错误。
异常(Exceptions)
异常是在代码执行过程中发生的运行时问题,通常是由于程序中的某些操作无法按照预期进行。异常是运行时问题,通常是由于某些操作无法按预期执行。
例如:
result = 10 / 0
运行结果如下:
> python exception_demo.py
Traceback (most recent call last):File "exception_demo.py", line 1, in <module>result = 10 / 0~~~^~~
ZeroDivisionError: division by zero
在这个例子中,由于尝试除以零,Python会抛出一个ZeroDivisionError异常。
异常处理
Python提供了try、except和finally关键字来处理异常。
- try块:放置可能引发异常的代码。
- except块:处理特定类型的异常。
- finally块:无论是否发生异常,都会执行finally块中的代码。
try:result = 10 / 0
except ZeroDivisionError:print("除数为0")
finally:print("无论如何都会执行")
运行结果如下:
除数为0
无论如何都会执行
在这个例子中,当尝试除以零时,ZeroDivisionError异常被捕获,并打印出错误消息。无论是否发生异常,finally块中的代码都会执行。
捕获多个异常
你可以使用多个except块来捕获不同类型的异常,或者在一个except块中指定多个异常类型:
try:result = 10 / 0
except ZeroDivisionError:print("ZeroDivisionError")
except ValueError:print("ValueError")try:value = int("abc")
except (ZeroDivisionError, ValueError):print("ZeroDivisionError or ValueError")
运行结果如下:
ZeroDivisionError
ZeroDivisionError or ValueError
获取异常信息
在except块中,你可以通过as关键字将异常对象赋值给一个变量,然后打印或处理这个异常对象的信息。
try:value = int("abc")
except (ZeroDivisionError, ValueError) as e:print("error:", e)
运行结果如下:
error: invalid literal for int() with base 10: 'abc'
自定义异常
Python允许你定义自己的异常类,通过继承内置的BaseException类来实现。
class CustomException(BaseException):def __init__(self, message):super().__init__(message)self.message = messagedef __str__(self):return self.messagetry:raise CustomException("这是一个自定义异常!")
except CustomException as e:print(e)
运行结果如下:
这是一个自定义异常!