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库后仍出现此问题。
解决方法
问题根源
- 变量定义缺失:只有当
data_product = 'NO2'时,代码块里才定义了fname变量;选择CO产品时,没有任何代码给fname赋值,导致后续调用Dataset(fname)触发未定义错误。 - 路径拼接隐患:直接用
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
相关产品推荐
相关产品推荐

