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

Python3.9 Jupyter Notebook导入os后遇fname未定义及工作目录问题

问题:TROPOMI数据读取时触发NameError错误

在Windows系统的Jupyter Notebook中处理TROPOMI数据,运行以下代码尝试读取NetCDF文件时,出现NameError: name 'fname' is not defined错误:

#Block 1: Import libraries
#Library to perform array operations
import numpy as np
#Library for accessing files in the directory
import os
#Library to read in netCDF files
from netCDF4 import Dataset

#Block 2: Open a TROPOMI netCDF4 data file

#Select TROPOMI product ('CO' or 'NO2')
data_product = 'CO'

#Enter file name
file_path = os.getcwd()
if data_product == 'CO':
    file_name = 'S5P_OFFL_L2__CO_____20181101T072905_20181101T091035_05447_01_010200_20181107T065627.nc'
if data_product == 'NO2':
    file_name = 'S5P_OFFL_L2__NO2____20181101T072905_20181101T091035_05447_01_010200_20181107T092435.nc'
    fname = [file_path + file_name]

#Set the file name to read
file_id = Dataset(fname)

错误堆栈信息:

NameError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_16108\271847607.py in
13
14 #Set the file name to read
---> 15 file_id = Dataset(fname)

NameError: name 'fname' is not defined

用户已将S5P文件放在当前工作目录,疑惑为何导入os库后仍出现此问题。

解决方法

问题根源

  1. 变量定义缺失:只有当data_product = 'NO2'时,代码块里才定义了fname变量;选择CO产品时,没有任何代码给fname赋值,导致后续调用Dataset(fname)触发未定义错误。
  2. 路径拼接隐患:直接用file_path + file_name拼接路径在Windows系统中可能出错——当前工作目录路径末尾不会自动带\,拼接后会生成类似C:\xxxxS5P_xxx.nc的非法路径。

修正后的代码

#Block 1: Import libraries
import numpy as np
import os
from netCDF4 import Dataset

#Block 2: Open a TROPOMI netCDF4 data file

#Select TROPOMI product ('CO' or 'NO2')
data_product = 'CO'

#Enter file name
file_path = os.getcwd()
# 根据产品类型选择文件名
if data_product == 'CO':
    file_name = 'S5P_OFFL_L2__CO_____20181101T072905_20181101T091035_05447_01_010200_20181107T065627.nc'
elif data_product == 'NO2':
    file_name = 'S5P_OFFL_L2__NO2____20181101T072905_20181101T091035_05447_01_010200_20181107T092435.nc'
else:
    raise ValueError("请选择有效的产品类型:'CO' 或 'NO2'")

# 安全拼接路径(自动适配Windows/ Linux路径分隔符)
fname = os.path.join(file_path, file_name)
# 读取文件
file_id = Dataset(fname)

关键改动说明

  • 统一路径拼接逻辑:无论选择哪种产品,都会执行路径拼接,保证fname始终被定义。
  • 使用os.path.join()拼接路径:自动处理不同系统的路径分隔符,避免手动拼接导致的路径错误。
  • 增加异常判断:避免输入无效产品类型时无提示报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:10:30