Ошибка типа: неподдерживаемые типы операндов для -: - PullRequest
1 голос
/ 03 ноября 2019

«Я совершенно новичок в программировании». Я установил программное обеспечение Dynasor, и когда я запустил его, столкнулся с некоторыми проблемами. я пытался их решить, но я не знаю, как решить следующую проблему:

Traceback (most recent call last):
  File "/usr/bin/dynasor", line 4, in <module>
    __import__('pkg_resources').run_script('dynasor==0.1.2', 'dynasor')
  File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 666, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1462, in run_script
    exec(code, namespace, namespace)
  File "/usr/lib/python3.5/site-packages/dynasor-0.1.2-py3.5-cygwin-3.0.7-i686.egg/EGG-INFO/scripts/dynasor", line 536, in <module>
    fn and writer(fn, output)
  File "/usr/lib/python3.5/site-packages/dynasor-0.1.2-py3.5-cygwin-3.0.7-i686.egg/dsf/output.py", line 39, in create_mfile
    fh.write("\n%% %s\n%s = ...\n%s;\n" % (desc, n, str(v)))
  File "/usr/lib/python3.5/site-packages/numpy/core/arrayprint.py", line 1463, in array_str
    return array2string(a, max_line_width, precision, suppress_small, ' ', "")
  File "/usr/lib/python3.5/site-packages/numpy/core/arrayprint.py", line 623, in array2string
    options['linewidth'] -= len(suffix)
TypeError: unsupported operand type(s) for -=: 'str' and 'int'

здесь " TypeError: неподдерживаемые типы операндов для -: 'str' и 'int' "Я нашел решение, но оно не работает для меня. например, когда я помещаю len(int(suffix)) в "arrayprint.py", строка 623, я сталкиваюсь с другой ошибкой:

options['linewidth'] -= len(int(suffix)) ValueError: invalid literal for int() with base 10: ''

или когда я ставлю int (len (суффикс)), это выдает эту ошибку:

options['linewidth'] -= int(len(suffix)) TypeError: unsupported operand type(s) for -=: 'str' and 'int'

Я установил dynasor таким образом "pip3.5 install dynasor", а также numpy таким образом "pip3.5 install numpy ==1.14.1" .

1 Ответ

0 голосов
/ 03 ноября 2019

Ответ:

В конце трассировки:

File "/usr/lib/python3.5/site-packages/numpy/core/arrayprint.py", line 623, in array2string
    options['linewidth'] -= len(suffix)
TypeError: unsupported operand type(s) for -=: 'str' and 'int

Это означает, что вы пытаетесь вычесть строку с int, что невозможно.
Функция len(...) всегда дает вам int , поэтому кажется, что options['linewidth'] - это строка .
Я рекомендуючто где бы вы ни установили значение options['linewidth'] в своем коде, вы сначала преобразуете это значение с помощью int(...).
Если options['linewidth'] поступает из библиотеки и вы не можете изменить код, который устанавливает его значение, вы все равно можетевыполните options['linewidth'] = int(options['linewidth']) перед его использованием.

Примечание:

Вы должны понимать, что у каждой переменной есть тип, и у каждого типа есть ограниченные операции, которые вы можете выполнять над ними:
-> Функция int(...) попытается преобразовать то, что вы ей дадите, в int , если вы дадите ей float (десятичное число), она снимает десятичную часть, есливы даете ему строку , которая представляет int , как '-42', он будет пытаться преобразовать его в int, ноесли вы дадите ей строку, которая не может быть интерпретирована как int, например, 'dog', это вызовет ошибку ValueError: invalid literal for int() with base 10: 'dog'
-> Использование len(...) в строке всегда дастразмер строки равен int , поэтому использование int(len(...)) ничего не изменит.

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