ipython / ipython/ipykernel

ValueError: Can't clean for JSON: datetime.time(10, 0)

Abierto
#546 0 comentarios 4 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
734
Forks
412
Merge medio
1 d 5 h
PR fusionados (30 d)
8

Descripción

Hi there!

I'm on `ipykernel==5.3.4`

I'm adding a custom mimebundle formatter to ipython for pandas dataframes, and I'm getting an error in the `jsonutil.py` `json_clean`. Here's my minimum reproduction example:

```python
from IPython import get_ipython
import datetime
import pandas as pd

def dataframe_formatter(df):
return { 'application/the21st': { 'rows': [{'datetime': datetime.time(10, 0) }]} }

get_ipython().display_formatter.mimebundle_formatter.for_type(pd.DataFrame, dataframe_formatter)
```

Displaying any dataframe in jupyter then produces an error with stack trace:

stack trace

```
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in
---> 1 df

/opt/venv/lib/python3.7/site-packages/IPython/core/displayhook.py in __call__(self, result)
264 self.fill_exec_result(result)
265 if format_dict:
--> 266 self.write_format_data(format_dict, md_dict)
267 self.log_output(format_dict)
268 self.finish_displayhook()

/opt/venv/lib/python3.7/site-packages/ipykernel/displayhook.py in write_format_data(self, format_dict, md_dict)
69
70 def write_format_data(self, format_dict, md_dict=None):
---> 71 self.msg['content']['data'] = json_clean(encode_images(format_dict))
72 self.msg['content']['metadata'] = md_dict
73

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
189 out = {}
190 for k,v in iteritems(obj):
--> 191 out[unicode_type(k)] = json_clean(v)
192 return out
193 if isinstance(obj, datetime):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
189 out = {}
190 for k,v in iteritems(obj):
--> 191 out[unicode_type(k)] = json_clean(v)
192 return out
193 if isinstance(obj, datetime):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
175
176 if isinstance(obj, list):
--> 177 return [json_clean(x) for x in obj]
178
179 if isinstance(obj, dict):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in (.0)
175
176 if isinstance(obj, list):
--> 177 return [json_clean(x) for x in obj]
178
179 if isinstance(obj, dict):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
189 out = {}
190 for k,v in iteritems(obj):
--> 191 out[unicode_type(k)] = json_clean(v)
192 return out
193 if isinstance(obj, datetime):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
195
196 # we don't understand it, it's probably an unserializable object
--> 197 raise ValueError("Can't clean for JSON: %r" % obj)

ValueError: Can't clean for JSON: datetime.time(10, 0)
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.