Аргумент TypeError: int () должен быть строкой, байтовоподобным объектом или числом, а не datetime.timedelta при печати скаляра timedelta64 - PullRequest
1 голос
/ 18 апреля 2020

Когда я печатаю скаляр numpy.timedelta64, используя форматирование строки, я получаю TypeError.

In [10]: td = np.timedelta64(5410102,'us')

In [12]: td.ndim   # check td is really a scalar
Out[12]: 0

In [13]: print("td: {}".format(td))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-bae2acf5773a> in <module>
----> 1 print("td: {}".format(td))

TypeError: int() argument must be a string, a bytes-like object or a number, not 'datetime.timedelta'

In [14]: print("td: {!r}".format(td))  # printing using repr() works as expected
td: numpy.timedelta64(5410102,'us')

In [15]: print(td)                     # Just printing also works fine
5410102 microseconds

Есть идеи, что происходит?

Обновление:

Кажется, ошибка в функции numpy.timedelta64.__format__().

In [67]: td.__format__("")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-67-6acc460ea008> in <module>
----> 1 td.__format__("")

TypeError: int() argument must be a string, a bytes-like object or a number, not 'datetime.timedelta'

Мне это кажется просто ошибкой. Обходной путь - преобразовать его в строку перед форматированием.

In [68]: print("{}".format(str(td)))
5410102 microseconds

1 Ответ

0 голосов
/ 18 апреля 2020

Вы можете прочитать о функции datetime.timedelta здесь . В любом случае, он говорит, что эта функция возвращает экземпляр объекта Date.

Ошибка появляется, потому что вы не можете объединить строку с объектом.

Чтобы решить эту проблему, вы нужно конкатенировать строку с печатаемым представлением объекта одним из следующих способов:

print(str + str(object)) # In this case, turns to the toString() function of the object, if exists (otherwise it returns an error). Converts the text the object shows to a string. In this case, it's possible to use that method on Date instances.

print(str + repr(object) # repr() functions returns a printable representation of the object of their class.

Кстати, строка print(object) работает, потому что она превращается в функцию toString () объекта , Использование print(str + object) запрещено, потому что оно пытается вывести неконкатенационные переменные, что невозможно, как объяснено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...