#python #typeerror #maya
#python #ошибка типа #maya
Вопрос:
Я пытаюсь создать папку для сохранения файла с помощью Python в Maya. Однако я получаю сообщение об ошибке, которое я не уверен, как решить. (пока не очень разбираюсь в написании сценариев)
Это код, который создает строку каталога: (Maya правильно распечатывает КАТАЛОГ)
# Creates a directory to save the .json file to
USERAPPDIR = cmds.internalVar(userAppDir = True)
DIRECTORY = os.path.join(USERAPPDIR, "gradingManager")
print('Maya application directory: ', DIRECTORY)
Функция, которая создает каталог, управляется кнопкой в Maya:
##########################
# Safe data in json file #
##########################
cmds.text(label = "")
cmds.text(label = " Save all results to a .json file for record keeping.",
font = "boldLabelFont")
cmds.button(label = "Save to .json file", command = self.save, width = 600)
Фактические функции:
def save(self, directory=DIRECTORY, *args):
######################################################################
## This method saves the information gathered above in a .json file ##
######################################################################
# creates a directory
self.createDir(directory)
print("saving things")
def createDir(self, directory=DIRECTORY):
###################################################################
## This function creates a directory for the save functionality. ##
###################################################################
if not os.path.exists(directory):
os.mkdir(directory)
Ошибка и функция, на которые она ссылается:
# Error: TypeError: file C:Program FilesAutodeskMaya2020binpython27.zipgenericpath.py line 26: coercing to Unicode: need string or buffer, bool found #
# Does a path exist?
# This is false for dangling symbolic links on systems that support them.
def exists(path):
"""Test whether a path exists. Returns False for broken symbolic links"""
try:
os.stat(path)
except os.error:
return False
return True
Надеюсь, этой информации достаточно.
Я сохранил функции как можно более чистыми, поэтому ясно, что проблема возникает из-за проверки, существует ли путь к новому каталогу..
Если вам нужна дополнительная информация, я буду рад предоставить ее.
Комментарии:
1. alwys поместил полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.
2. если ПОЛНОЕ сообщение об ошибке показывает вам, в какой строке проблема, вы можете использовать
print()
иprint(type())
для проверки значений в переменных. Кажется, вы вводите неправильное значениеdirectory
при выполненииos.path.exists(directory)
. Кажется, у вас есть значениеTrue/False
вместо expectecpath
. Вы запускаете это, вsave()
котором назначеноbutton
—button(..., command=self.save)
— но я не уверен, чтоbutton
оно будет выполнено с ожидаемымpath
. Он может выполнить его с совершенно разными значениями (т. Е. С информацией о событии) илиsave(True)
и у вас будетcreateDir(True)
иexists(True)
3. Спасибо за ваш ответ! Насколько я вижу, это полная строка ошибки, которую я получаю. Это указывает на то, что ошибка находится в строке 26 из документа, который установлен с Maya / собственным файлом Maya (не уверен, так ли вы это говорите ..) Строка 26 в этом файле — «os.stat (path)», но я включил всю функцию целиком. (итак, это не моя собственная функция, а от Maya self)
4. Кнопка запускает правильную функцию… когда я говорю функции просто напечатать что-то, она делает это, когда я нажимаю кнопку… это то, что вы имеете в виду? наконец… в нем говорится, что у меня где-то есть bool вместо строки … но если я наведу курсор мыши на слово «каталог», это указывает на то, что на самом деле это строка…
5. вы проверили
print(directory)
функциюsave
? Когда вы нажимаете кнопку, она может запускать ее какsave(True)
, но вы ожидаетеsave(some_path)
, илиsave()
со значением по умолчаниюDIRECTORY
— и это может создать вашу проблему.
Ответ №1:
Когда вы нажимаете кнопку, вы ожидаете, что она будет запущена save(some_path)
или save()
со значением по умолчанию DIRECTORY
, но это не работает таким образом.
Кнопка выполняет функцию с некоторыми значениями, предопределенными авторами Maya. Я не знаю, на какие значения отправляется кнопка в Maya save()
, но в других графических интерфейсах обычно она отправляет информацию о событиях — ie. какой виджет был нажат, какая кнопка мыши использовалась, какова была позиция мыши и т. Д.
Итак, кажется, что кнопка выполняется save(True)
или, может быть, даже save(True, other values)
и присваивается True
словарю в вашем def save(self, dictionary, ...)
, а затем выполняется createDir(True) and
exists(True), и вы получаете сообщение об ошибке.
Вы должны использовать DIRECTORY
непосредственно внутри функции.
def save(self, *args):
directory = DIRECTORY
# creates a directory
self.createDir(directory)
print("saving things")
И если у вас есть какой-то виджет для выбора каталога или записи каталога вручную, вам также придется использовать его внутри функции
def save(self, *args):
directory = some_widget_to_select_folder.get_selected_folder()
if not directory:
directory = DIRECTORY
# creates a directory
self.createDir(directory)
print("saving things")