我的Python学习日记(九):错误和异常

本文记录了作者在学习Python过程中对错误和异常的理解,包括语法错误的常见类型、异常的概念及其分类、try/except、try/except…else/finally语句的用法,以及raise和assert关键字在异常处理中的应用。

我的Python学习日记


DateLog
2023.12.07完成编写

9. 错误和异常

由于在学习一些方法时要使用一些实例,很多时候就会产生各种各样的错误异常以及一些像raisetry这样没学过的关键字,每次遇到都要查😭,所以单独开一章来学习错误和异常的知识

在Python中,语法错误和异常是两种常见错误:

9.1 语法错误

语法错误顾名思义就是违反了Python的语法规则引起的错误,比如本人因为以前使用C语言较多,所以现在径长会出现缺少冒号等错误,一些常见的错误如下:

Error描述
SyntaxError: invalid syntax一般性的语法错误,即Python解释器无法识别代码
SyntaxError: invalid character in identifier标识符中包含了非法字符
SyntaxError: unmatched ‘)’, unmatched ‘]’, unmatched ‘}’括号未匹配,可能是括号未正确闭合或嵌套错误
SyntaxError: missing parentheses in call to ‘function’函数调用时缺少括号
IndentationError: unexpected indent发生了意外的缩进错误,
也是我这种新手常会犯的错误
IndentationError: expected an indented block在需要缩进的地方没有提供缩进

语法分析器会指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。


9.2 异常

当程序语法正确但程序本身运行出现错误产生的即为异常(Exception)

异常以不同的类型出现,作为信息的一部分打印出来,以调用栈的形式显示具体信息

常见的异常有NameError(未定义变量名等)和TypeError(操作的变量类型不能匹配)
更多异常类型可以查阅Python 官方文档 内置异常部分

发生异常时会中断程序运行


9.3 异常处理

9.3.1 try/except 语句

异常捕捉可以使用try/except语句

基本语法如下:

try:
    # 可能引发异常的代码块
except SomeException as e:
    # 处理异常的代码块
  • try语句块包含可能引发异常的代码。
  • except语句块包含在发生异常时要执行的代码。
  • 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略,跳转到对应的except语句后的代码块中。
  • 我们可以在except后面指定要捕获的异常类型(例如 ValueError、TypeError)或者捕获所有异常使用 except Exception或者except后什么都不加。
  • 一个try后面可以使用多个except语句来处理不同类型的异常
    • try:
          # 可能引发异常的代码块
          result = 1/0
      except ZeroDivisionError as e:
          # 处理除零错误的代码
          print(f"ZeroDivisionError: {e}")
      except ValueError as e:
          # 处理值错误的代码
          print(f"ValueError: {e}")
      except Exception as e:
          # 处理其他异常的代码
          print(f"产生了一个未预料的错误: {e}")
      
  • 一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组
  • 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的try中。

9.3.2 try/except...else 语句

在try/except语句后还可以跟一个可选的子句else,置于所有except子句的后面。

基本语法如下:

try:
    # 可能引发异常的代码块
except SomeException as e:
    # 处理异常的代码块
else:
    # 没有异常时执行的代码块

9.3.3 try/finally 语句

finally语句置于else子句之后:

try:
    # 可能引发异常的代码块
except SomeException as e:
    # 处理异常的代码块
else:
    # 没有异常时执行的代码块
finally:
    # 不管有没有异常都会执行的代码块

9.4 抛出异常

raise语句是Python中用于手动引发异常的关键字。通过 raise 语句,我们可以在代码中显式地触发异常,从而通知程序出现了某种错误或特殊情况。

raise [Exception[, args[, traceback]]]

  • Exception:引发的异常类型。可以是Python内置的异常类型(例如,ValueError、TypeError等),也可以是自定义的异常类。
  • args:传递给异常构造函数的参数,用于提供关于异常的额外信息。
  • traceback:一个可选的参数,通常不需要手动提供。它是一个保存有关异常发生位置的堆栈跟踪信息的对象。
x = 10
if x > 5:
    raise ValueError('x 不能大于 5。x 的值为: {}'.format(x)) # 如果x大于5则引发一个内置的ValueError

如果要使用自定义的错误类型,则需要提前使用class定义,继承自Exception类:

class MoreThan10Error(Exception):
    pass

x = 10
if x > 5:
    raise MoreThan10Error('x 不能大于 5。x 的值为: {}'.format(x))

raise通常与try/except语句结合使用:

class MoreThan10Error(Exception):
    pass

try:
    x = 10
    if x > 5:
        raise MoreThan10Error('x 不能大于 5。x 的值为: {}'.format(x))
except MoreThan10Error:
    print("Error: MoreThan10Error")

9.5 assert

除了上述的方法外,我们可以直接使用assert语句触发异常,具体语法及说明如下:

assert 判断语句
  • 当该判断语句为True时,程序正常执行
  • 当该判断语句为False时,程序触发异常,类型为AssertionError

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HIT-Zxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值