UndefinedUnitError如何处理?

How deal with the UndefinedUnitError?

我从 noaa 下载数据,我想使用函数 vertical_velocity=metpy.calcmpcalc.vertical_velocity(omega,pressure,temperature)[= 计算垂直速度20=]。但是当我处理变量的单位时出了点问题。

import xarray as xr
import metpy.calc as mpcalc
omega=xr.open_dataset('D:\data_english\jwk\omega.mon.mean.nc')

temperature=xr.open_dataset('D:\data_english\jwk\air.mon.mean.nc')

height=xr.open_dataset('D:\data_english\jwk\hgt.mon.mean.nc')

pressure=mpcalc.height_to_pressure_std(height['hgt'])

verticalwind=mpcalc.vertical_velocity(omega['omega'], pressure, temperature['air'])


Traceback (most recent call last):
  File "<ipython-input-194-da22b63a1943>", line 1, in <module>
    verticalwind=mpcalc.vertical_velocity(omega['omega'], pressure, temperature['air'])
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 1199, in wrapper
    _mutate_arguments(bound_args, xr.DataArray, lambda arg, _: arg.metpy.unit_array)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 1233, in _mutate_arguments
    bound_args.arguments[arg_name] = mutate_arg(arg_val, arg_name)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 1199, in <lambda>
    _mutate_arguments(bound_args, xr.DataArray, lambda arg, _: arg.metpy.unit_array)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 157, in unit_array
    return units.Quantity(self._data_array.data, self.units)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 134, in units
    return units.parse_units(self._data_array.attrs.get('units', 'dimensionless'))
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 1084, in parse_units
    units = self._parse_units(input_string, as_delta)
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 1298, in _parse_units
    return super()._parse_units(input_string, as_delta)
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 1112, in _parse_units
    cname = self.get_name(name)
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 636, in get_name
    raise UndefinedUnitError(name_or_alias)
UndefinedUnitError: 'Pascal' is not defined in the unit registry

**omega、高度和温度的单位分别为'Pascal/s'、'm'和'degC'。可变压力是通过函数mpcalc.height_to_pressure_std计算出来的,这个函数没有给出压力的单位。但是压力值的范围是从1000到0,所以我认为它的单位是'hpa'。

错误报告“'Pascal' 未在单元注册表中定义”。也许 'Pascal/s' 不是 omega 的默认单位?但是我怎么知道单元注册表中定义了哪些单元?谁能帮我?谢谢!**

这是一个问题,因为 MetPy 使用的单位库 (Pint) 没有与 netCDF 气候和预测公约用于元数据的 UDUnits 格式相同的 capitalization/case 灵敏度规则。 Fixing this 在 MetPy 的待办事项列表中,但遇到了一些障碍。

现在的解决方法是将您的单位更改为 Pint 可以理解的单位,例如:

omega['omega'].attrs['units'] = 'pascal / s'