id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 558977158,MDU6SXNzdWU1NTg5NzcxNTg=,3743,A suggested solution to the `TypeError: Invalid value for attr:` error upon `.to_netcdf`,6872529,open,0,,,3,2020-02-03T10:10:51Z,2023-04-06T17:43:37Z,,NONE,,,,"Even though netcdf conventions don't allow some data types in the attributes, it might be usefull to simply serialize those as strings rather than throw an error. Maybe add a `force_serialization` keyword argument to the `.to_netcdf` method. Example: Setup a DataArray with _bad values_ in the attributes: ```python import numpy as np from xarray import DataArray, load_dataset from pandas import Timestamp from numbers import Number valid_types = (str, Number, np.ndarray, np.number, list, tuple) da = DataArray( name='bad_values', attrs=dict( bool_value=True, none_value=None, datetime_value=Timestamp.now() ) ) ds = da.to_dataset() ds.bad_values.attrs ``` Output: ```python {'bool_value': True, 'none_value': None, 'datetime_value': Timestamp('2020-02-03 10:53:02.350105')} ``` The code in the except clause can be easily impolemented under [`_validate_attrs`](https://github.com/pydata/xarray/blob/4c96d53e6caa78d56b785f4edee49bbd4037a82f/xarray/backends/api.py#L185). ```python try: ds.to_netcdf('test.nc') # Fails with TypeError: Invalid value for attr: ... except TypeError as e: print(e.__class__.__name__, e) for variable in ds.variables.values(): for k, v in variable.attrs.items(): if not isinstance(v, valid_types) or isinstance(v, bool): variable.attrs[k] = str(v) ds.to_netcdf('test.nc') # Works as expected ds_from_file = load_dataset('test.nc') ds_from_file.bad_values.attrs ``` Output: ```python TypeError Invalid value for attr: None must be a number, a string, an ndarray or a list/tuple of numbers/strings for serialization to netCDF files {'bool_value': 'True', 'none_value': 'None', 'datetime_value': '2020-02-03 10:43:38.479866'} ```","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/3743/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,issue