You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中传入0、1、2调用open函数为何未触发异常?

问题解答

代码复现

def abrir_archivo(nombre_archivo):
    try:
        archivo = open(nombre_archivo, 'r')
    except FileNotFoundError:
        print("El archivo no fue encontrado")
    except:
        print("Error desconocido")
    else:
        print("Abriendo exitosamente")
    finally:
        print("Finalizando ejecucion")

abrir_archivo(1)

疑问点

运行上述程序时,传入0、1、2作为参数调用abrir_archivo函数,会执行else分支并打印"Abriendo exitosamente";但传入3、-1或其他数字时,会打印"Error desconocido"。按预期传入数字应该触发异常,为何0、1、2不会触发?

原因解析

  • Python的open()函数不仅能接收字符串类型的文件名,还能接收整数类型的文件描述符。
  • 系统在程序启动时,会默认打开三个标准流对应的文件描述符:
    • 0:对应标准输入(stdin),比如键盘输入流
    • 1:对应标准输出(stdout),比如控制台输出流
    • 2:对应标准错误(stderr),比如错误信息输出流
  • 这三个文件描述符是系统预先分配并处于打开状态的,所以用0、1、2调用open()时,不会触发文件找不到的异常,也不会触发其他错误,因此代码会顺利执行else分支。
  • 而3、-1这类数字不是系统默认维护的有效文件描述符,用它们调用open()会触发OSError(具体为无效文件描述符的错误),这个异常不属于FileNotFoundError,所以会被第二个通用except捕获,打印"Error desconocido"。

内容的提问来源于stack exchange,提问作者David Chambilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:32:44