0

Maya 2012 でこのエラーが発生しましたが、修正方法がわかりません。フォルダー内の他のファイルを検索するときに、python にinitファイルを無視させようとしています。どんな提案でも大歓迎です。

Error: 'NoneType' object is not iterable
Traceback (most recent call last):
  File "<maya console>", line 18, in <module>
  File "E:/3D/maya/2012-x64/scripts/RiggingTool/Modules\System\blueprint_UI.py" line 28, in __init__
    self.initialiseModuleTab(tabHeight, tabWidth)
  File "E:/3D/maya/2012-x64/scripts/RiggingTool/Modules\System\blueprint_UI.py", line 50, in initialiseModuleTab
    for module in utils.findAllModules("Modules/Blueprint"):
  File "E:/3D/maya/2012-x64/scripts/RiggingTool/Modules\System\utils.py", line 8, in findAllModules
    for file in allPyFiles:
TypeError: 'NoneType' object is not iterable

メインコードは

import maya.cmds as cmds

import System.utils as utils
reload(utils)

class Blueprint_UI:
    def __init__(self):
        # Store UI elements in a dictionary
        self.UIElements = {}

        if cmds.window("blueprint_UI_window", exists=True):
            cmds.deleteUI("blueprint_UI_window")

        windowWidth = 400
        windowHeight = 598

        self.UIElements["window"] = cmds.window("blueprint_UI_window", width=windowWidth, height=windowHeight, title="Blueprint Module UI", sizeable=False)

        self.UIElements["topLevelColumn"] = cmds.columnLayout(adjustableColumn=True, columnAlign="center")

        # Setup tabs
        tabHeight = 500
        self.UIElements["tabs"] = cmds.tabLayout(height=tabHeight, innerMarginWidth=5, innerMarginHeight=5)

        tabWidth = cmds.tabLayout(self.UIElements["tabs"], q=True, width=True)
        self.scrollWidth = tabWidth - 40

        self.initialiseModuleTab(tabHeight, tabWidth)

        cmds.tabLayout(self.UIElements["tabs"], edit=True, tabLabelIndex=([1, "Modules"]))


        # Display window
        cmds.showWindow( self.UIElements["window"] )

    def initialiseModuleTab(self, tabHeight, tabWidth):
        scrollHeight = tabHeight # temp value

        self.UIElements["moduleColumn"] = cmds.columnLayout(adj=True, rs=3)

        self.UIElements["moduleFrameLayout"] = cmds.frameLayout(height=scrollHeight, collapsable=False, borderVisible=False, labelVisible=False)

        self.UIElements["moduleList_Scroll"] = cmds.scrollLayout(hst=0)

        self.UIElements["moduleList_column"] = cmds.columnLayout(columnWidth = self.scrollWidth, adj=True, rs=2)

        # First separator
        cmds.separator()

        for module in utils.findAllModules("Modules/Blueprint"):    
            print module

フォルダー内のファイルを検索するコード:

def findAllModules(relativeDirectory):
    # Search the relative directory for all available modules
    # Return a list of all module names (excluding the ".py" extension)
    allPyFiles = findAllFiles(relativeDirectory, ".py") 

    returnModules = []

    for file in allPyFiles:
        if file != "__init__":
            returnModules.append(file)

    return returnModules    


def findAllFiles(relativeDirectory, fileExtension):
    # Search the relative directory for all files with the given extension
    # Return a list of all file names, excluding the file extension
    import os

    fileDirectory = os.environ["RIGGING_TOOL_ROOT"] + "/" + relativeDirectory + "/"

    allFiles = os.listdir(fileDirectory)

    # refine all files, listing only those of the specified file extension
    returnFiles = []
    for f in allFiles:
        splitString = str(f).rpartition(fileExtension)

        if not splitString[1] == "" and splitString[2] == "":
            returnFiles.append(splitString[0])


      print returnFiles

メイン内にこのコードを追加すると壊れます

  for module in utils.findAllModules("Modules/Blueprint"):

__init__下部のコードを追加すると、ファイル検索コード内でもエラーが発生します

returnModules = []

for file in allPyFiles:
    if file != "__init__":
        returnModules.append(file)

return returnModules

一番下の 2 つのコードは正しいように見えるため、NoneType エラーがどのように発生するのか正確にはわかりません。

4

2 に答える 2

2

に変更print returnFilesreturn returnFilesます。

于 2013-04-06T09:29:12.160 に答える
1

あなたはreturnFilesから戻っていないfindAllFiles()ので、それは戻っています -- これNoneは反復可能ではありません。

于 2013-04-06T09:29:50.937 に答える