@@ -376,14 +376,14 @@ def _write_metadata(self, metadata):
376
376
elif isinstance (d , (datetime .datetime , datetime .date )):
377
377
dates .append (d .isoformat ())
378
378
else :
379
- raise ValueError (
379
+ raise TypeError (
380
380
'Invalid type for Date metadata. '
381
381
'Expected iterable of str, date, or datetime, '
382
382
'not {!r}.' .format (type (d )))
383
383
else :
384
- raise ValueError ('Invalid type for Date metadata. '
385
- 'Expected str, date, datetime, or iterable '
386
- 'of the same, not {!r}.' .format (type (date )))
384
+ raise TypeError ('Invalid type for Date metadata. '
385
+ 'Expected str, date, datetime, or iterable '
386
+ 'of the same, not {!r}.' .format (type (date )))
387
387
metadata ['Date' ] = '/' .join (dates )
388
388
elif 'Date' not in metadata :
389
389
# Do not add `Date` if the user explicitly set `Date` to `None`
@@ -444,14 +444,23 @@ def ensure_metadata(mid):
444
444
if keywords is not None :
445
445
if isinstance (keywords , str ):
446
446
keywords = [keywords ]
447
-
448
- mid = ensure_metadata (mid )
449
- writer .start ('dc:subject' )
450
- writer .start ('rdf:Bag' )
451
- for keyword in keywords :
452
- writer .element ('rdf:li' , text = keyword )
453
- writer .end ('rdf:Bag' )
454
- writer .end ('dc:subject' )
447
+ if np .iterable (keywords ):
448
+ mid = ensure_metadata (mid )
449
+ writer .start ('dc:subject' )
450
+ writer .start ('rdf:Bag' )
451
+ for keyword in keywords :
452
+ if isinstance (keyword , str ):
453
+ writer .element ('rdf:li' , text = keyword )
454
+ else :
455
+ raise TypeError ('Invalid type for Keywords metadata. '
456
+ 'Expected iterable of str'
457
+ ', not {!r}.' .format (type (keyword )))
458
+ writer .end ('rdf:Bag' )
459
+ writer .end ('dc:subject' )
460
+ else :
461
+ raise TypeError ('Invalid type for Keywords metadata. '
462
+ 'Expected str or iterable '
463
+ 'of str, not {!r}.' .format (type (keywords )))
455
464
456
465
if mid is not None :
457
466
writer .close (mid )
0 commit comments