diff --git a/src/calibre/ebooks/metadata/book/formatter.py b/src/calibre/ebooks/metadata/book/formatter.py index 7adbe81016..5d9e2ebe6c 100644 --- a/src/calibre/ebooks/metadata/book/formatter.py +++ b/src/calibre/ebooks/metadata/book/formatter.py @@ -33,8 +33,7 @@ class SafeFormat(TemplateFormatter): b = self.book.get_user_metadata(key, False) except: b = None - if b and ((b['datatype'] == 'int' and self.book.get(key, 0) == 0) or - (b['datatype'] == 'float' and self.book.get(key, 0.0) == 0.0)): + if b and b['datatype'] in {'int', 'float'} and self.book.get(key, None) is None: v = '' else: v = self.book.format_field(key, series_with_index=False)[1] diff --git a/src/calibre/library/field_metadata.py b/src/calibre/library/field_metadata.py index a76d78da0b..b59e28a847 100644 --- a/src/calibre/library/field_metadata.py +++ b/src/calibre/library/field_metadata.py @@ -504,9 +504,12 @@ class FieldMetadata(dict): return [k for k in self._tb_cats.iterkeys() if self.is_ignorable_field(k)] def is_series_index(self, key): - m = self[key] - return (m['datatype'] == 'float' and key.endswith('_index') and - key[:-6] in self) + try: + m = self._tb_cats[key] + return (m['datatype'] == 'float' and key.endswith('_index') and + key[:-6] in self._tb_cats) + except (KeyError, ValueError, TypeError, AttributeError): + return False def key_to_label(self, key): if 'label' not in self._tb_cats[key]: