Python异常处理与文件读写详解

沈亦白
沈亦白
发布时间:2026-10-14 | 5人浏览过
原创

本文深入解析Python中的异常处理机制,涵盖try-except完整语法、异常向调用方传递的规则以及使用raise主动抛出异常的方法。同时详细介绍文件读写操作,重点说明文件指针变化对多次读取的影响,并提供小文件一次性复制与大文件逐行复制的代码实现,帮助开发者掌握稳健的文件处理技巧。

在Python编程中,异常处理是确保程序健壮性的关键机制。通过合理捕获和处理错误,可以避免程序因意外错误而崩溃。

Python提供了完整的异常处理语法结构,通常包括try、except、else和finally四个部分。try块用于放置可能引发异常的代码;except块用于捕获特定类型的异常并执行处理逻辑;else块在try块未发生异常时执行;finally块无论是否发生异常都会执行,常用于资源清理。例如,在获取用户输入并执行除法运算时,若用户输入非整数会触发ValueError,程序将提示重新输入;若发生其他未知错误,则通过Exception捕获并打印错误信息;若一切正常,则输出成功提示;最后无论结果如何,都会执行清理代码。


try:
  # 提示用户输入一个整数
  num = int(input("输入一个整数:"))
  # 使用 8 除以用户输入的整数并且输出
  result = 8 / num
  print(result)
except ValueError:
  print("请输入正确的整数!")
except Exception as result:
  print("未知错误:%s" % result)
else:
  print("尝试成功")
finally:
  print("无论是否出现错误都会执行的代码!")
print("-" * 50)

异常具有向上传递的特性。当函数或方法内部发生异常且未被局部处理时,该异常会传递给调用该函数的代码层。

如果异常一直传递到主程序层级且仍无对应的异常处理机制,Python解释器将终止程序的运行。因此,在主程序入口或关键调用点设置异常捕获是必要的防御措施。


# 异常的传递性
def demo1():
  return int(input("输入整数:"))


def demo2():
  return demo1()
# 利用异常的传递性,在主程序捕获异常


try:
  print(demo2())
except Exception as result:
  print("未知错误:%s" % result)

开发者也可以主动抛出异常,以在特定条件下中断正常流程并通知调用者。使用raise关键字可以实例化并抛出异常对象,常用于参数校验或状态检查不满足要求时。例如,在密码输入函数中,若输入长度小于8位,程序会主动创建一个Exception对象并抛出,提示“密码长度不够”,从而强制调用者处理该错误情况。


def input_password():
  # 1. 提示用户输入密码
  pwd = input("请输入密码:")
  # 2. 判断密码长度 >= 8,返回用户输入的密码
  if len(pwd) >= 8:
    return pwd
  # 3. 如果 < 8 主动抛出异常
  print("主动抛出异常!")
  # 1> 创建异常对象 - 可以使用错误信息字符串作为参数
  ex = Exception("密码长度不够!")
  # 2> 主动抛出异常
  raise ex


# 提示用户输入密码
try:
  print(input_password())
except Exception as result:
  print(result)

文件读写是Python基础操作之一,涉及打开、读取/写入和关闭文件三个基本步骤。正确管理文件指针和文件资源是避免数据丢失或内存泄漏的关键。

执行读取操作后,文件指针会移动到已读取内容的末尾。如果再次调用read()方法,由于指针已位于文件尾,将读取不到任何内容,返回空字符串。因此,连续读取同一文件内容时需注意指针位置,或每次读取前重置指针。


# 1. 打开文件
file = open("test.py")
# 2. 读取文件内容
text = file.read()
print(text)
print(len(text))
print("-" * 50)
text = file.read()
print(text)
print(len(text))
# 3. 关闭文件
file.close()

对于小文件,可以直接一次性读取全部内容到内存中,然后写入新文件。这种方式代码简洁,适用于文件体积较小、内存充足的场景。具体步骤为:以默认只读模式打开源文件,以写入模式打开目标文件,读取源文件全部内容并写入目标文件,最后关闭两个文件句柄以释放资源。


# 1. 打开
file_read = open("test.py")
file_write = open("test[复件].py", "w")
# 2. 读、写
text = file_read.read()
file_write.write(text)
# 3. 关闭
file_read.close()
file_write.close()

对于大文件,一次性加载到内存可能导致内存溢出。推荐采用逐行读取的方式,通过循环不断读取一行内容并写入目标文件,直到读取完毕。这种方式内存占用恒定,适合处理大型文本文件。具体实现中,使用readline()方法每次读取一行,若返回空字符串则说明文件结束,跳出循环,最后关闭文件。


# 1. 打开
file_read = open("test.py")
file_write = open("test[复件].py", "w")
# 2. 读、写
while True:
  # 读取一行内容
  text = file_read.readline()
  # 判断是否读取到内容
  if not text:
    break
  file_write.write(text)

# 3. 关闭
file_read.close()
file_write.close()

掌握Python异常处理与文件读写技巧,能够有效提升程序的稳定性和数据处理效率。在实际开发中,建议结合具体场景选择合适的异常捕获策略和文件读写模式,并始终注意资源释放。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表