python基础第十九节

19.1 python异常

Python异常是在程序执行过程中发生的错误或异常情况. 当代码遇到错误时, 会引发异常并中断程序的正常执行流程. 异常提供了一种机制来处理错误, 以便程序可以在错误发生时采取适当的行动, 而不会导致程序崩溃或产生意外结果.
在Python中, 异常是通过异常类表示的. 每个异常类都是Python内置的或自定义的, 用于表示特定类型的错误. 常见的内置异常类包括:

19.2 python的异常捕获.

try-except语句
在Python中, 我们使用try-except语句来捕获和处理异常. try块用于编写可能引发异常的代码, 而except块用于处理异常情况.

try:
	# 可能引发异常的代码块
except ExceptionType:
	# 处理异常的代码块
try:
    # 可能引发异常的代码块
except (ExceptionType1, ExceptionType2):
    # 处理多个异常类型

捕获所有的异常信息

try:
    # 可能引发异常的代码块
except:
    # 处理所有异常

获取异常信息
在异常处理块中, 可以使用as关键字将异常信息赋给一个变量, 以便进一步处理或打印异常信息.

try:
    # 可能引发异常的代码块
except ExceptionType as e:
    # 处理异常, 并使用变量e访问异常信息

else块
else块是try-except语句的可选部分, 用于指定在try块中的代码执行完毕且没有引发异常时要执行的代码. 如果在try块中发生了异常并被捕获, 则不会执行else块中的代码.

try:
    # 可能引发异常的代码块
except ExceptionType:
    # 处理异常的代码块
else:
    # 在没有发生异常时执行的代码块

注意点: 在try里如果return了, 即使没有报错, 也不会执行else里的代码

# 示例代码, 大家自己跑到pycharm里运行的试试.
def test():
    try:
        # 执行一些操作
        result = 3
        return result  # 在这里返回结果,函数立即退出
    except ValueError:
        # 处理异常
        pass
    else:
        # 这里的代码不会执行
        print("This code will not be executed.")

# 调用函数
result = test()
print(result)

使用 else 块可以提高代码的可读性和可维护性, 但并不是所有人都认同这种做法.有些开发者更倾向于只使用 try-except 块, 将异常处理的逻辑放在一起, 使代码更加紧凑.总之, 使用 try-else 结构是一种代码组织的选择, 而不是强制性的规范.在实际开发中, 我们应根据代码的需求、可读性和一致性等因素来决定是否使用 else
finally块
除了try-except语句, 还可以使用finally(可选的)块来执行无论是否发生异常都需要执行的代码. finally块中的代码在try块中的代码执行完毕后无论是否发生异常都会执行.

try:
    # 可能引发异常的代码块
except ExceptionType:
    # 处理异常的代码块
finally:
    # 无论是否发生异常, 都会执行的代码块

总结
异常通常用于处理意外或异常的情况, 即那些无法在代码中预测和处理的情况.当你无法准确预测可能出现的错误或无法在当前上下文中处理错误时, 抛出异常是一种更合适的方式.异常提供了一种机制, 让你能够在错误发生时终止当前的代码执行, 并将控制权交给上层代码或异常处理机制

19.3 raise语句

raise 语句是 Python 中的一个关键字, 用于手动引发异常.通过 raise 语句, 我们可以选择性地在代码中引发特定类型的异常, 并提供相应的错误信息.这样, 我们就能够在需要的时候中断程序的正常执行流程, 并进行适当的异常处理.
语法:

raise [ExceptionType([args])]
# ExceptionType 是要引发的异常类型.
# args 是一个可选参数, 用于向异常类传递附加的信息.
# 如果只写一个raise, 则会默认引发RuntimeError.
# raise语句后的代码不会执行.(类似return)

使用注意事项:

  1. 选择适当的异常类型:根据具体的情况, 选择合适的异常类型来反映错误的性质.Python 提供了许多内置的异常类, 如 ValueErrorTypeErrorFileNotFoundError 等, 可以根据需要选择合适的异常类或自定义异常类.
  2. 提供明确的错误信息:在引发异常时, 尽量提供清晰、明确的错误信息, 以便在程序出错时能够准确地定位和理解错误的原因.
  3. 在适当的位置引发异常:raise 语句应该放置在程序逻辑中合适的位置, 以便在需要时引发异常.根据代码的要求, 可以在函数、方法或其他控制流结构中使用 raise 语句.
  4. 捕获和处理异常:使用 try-except 块捕获和处理引发的异常.根据具体的异常类型, 编写相应的错误处理代码, 以便优雅地处理异常情况.
  5. 避免滥用 raise 语句:raise 语句应该用于合适的情况, 不应该滥用.只有在必要的时候才使用 raise 语句, 以避免引发不必要的异常.
    案例: 模拟用户名校验.