python之异常

本文深入探讨Python中的异常处理机制,包括try-except、try-finally语句的使用,以及常见错误类型如ZeroDivisionError、ValueError的解析。通过实例讲解如何捕获和处理异常,确保程序的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常 exception


错误是指由于逻辑或语法等导致一个程序无法正常执行。有些错误无法预知

什么是异常:
  异常是程序出错时标识的一种状态
  当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
  
异常的作用:
  1. 通知上层的调用者,有错误产生需要处理
  2. 用作信号传递
  
try 语句的两种语法:
  try-except语句


# 写一个函数用来分妹子,n为妹子个数。我就喜欢妹子。嘤嘤嘤
def f_meizi(n):
    print("现在有", n, "个妹子,要分给几位帅哥呢?")
    d = int(input("请输入人数: "))
    div = n / d
    print("每个人分", div, "个妹子")

try:
    f_meizi(10)
except ZeroDivisionError:
    print("发现在被零除的错误,已经处理完毕转为正常状态")
except ValueError:
    print("发现值错误,已经捕获并处理")
#finally 不管怎么样 都要被执行的
finally:
       print("嘤嘤嘤,我要妹子")


print("project over")

#PS:我真的想不出什么例子了


  try-finally语句

try-except语法:
  try:
    可能触发异常的语句...
  except 错误类型1 [as 变量1]
      异常处理语句1
  except 错误类型2 [as 变量2]
      异常处理语句2
  except (错误类型3, 错误类型4) [as 变量3]
      异常处理语句3
  ...
  except:
      其它异常处理语句
  else:
      未发生异常处理语句
  finally:
      最终语句

作用:
  捕获异常,将程序转为正常状态

语法说明:
  as 子句是用于绑定错误对象的变量,可以省略
  except 子句可以有一个或多个,但至少要有一个
  else 子句最多只能有一个.也可以省略不写
  finally 子句最多只能有一个,也可以省略不写
  else 子句在没有出现异常时,子句的语句才被执行
  finally 子句在无论是否出现异常时都会被执行

 

Python中的错误类型:
>>> help(__builtins__)
ZeroDivisionError    除(或取模)零
StopIteration        迭代器没有更多的值
IOError              输入/输出错误
ImportError          导入模块失败
IndexError           序列中没有此索引
IndentationError     缩进错误
ValueError           传入无效的参数
AssertionError       断言语句失败
NameError            未声明或初始化对象
AttributeError       对象没有这个属性

 


try-finally 语法
  try:
      可能触发异常的语句
  finally:
      最终子句

语法说明:
  finally 子句不可以省略
  此语句中一定不存在 except 子句
作用:
  1. 通常try/finally语句做触发异常时必须要做的事情
       无论异常是否发生,finally 子句都会被执行
  2. try-finally 语句不会改变程序的(正常/异常)状态


raise 语句
作用:
  生成一个错误,让程序进入异常状态
语法:
  raise 异常类型
  或
  raise 异常对象


assert 语句 (断言语句)

assert 语句的语法:
  assert 真值表达式, 错误数据(通常是字符串)
作用:
  当真值表达式为False时,用错误数据创建一个AssertionError类型的错误,并进入异常状态

等同于:
  if 真值表达式 == False:
      raise AssertionError(错误数据)

def get_score():
    score = int(input("请输入学生成绩:"))
    assert 0 <= score <= 100, "成绩超出范围!"
    return score


try:
    score = get_score()
    print("学生成绩为:", score)
except AssertionError as e:
    print("发生断言错误:", e)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值