Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 递归返回列表函数停止?_Python_Blender - Fatal编程技术网

Python 递归返回列表函数停止?

Python 递归返回列表函数停止?,python,blender,Python,Blender,我不确定这里发生了什么,请耐心听我说,我刚开始做python import traceback import bpy propelAnimated = bpy.data.objects.get("Propel_Animated") def printHierarchy(object, levels=10): def recurse(object, parent, depth): if depth > levels: r

我不确定这里发生了什么,请耐心听我说,我刚开始做python

import traceback
import bpy

propelAnimated = bpy.data.objects.get("Propel_Animated")

def printHierarchy(object, levels=10):
    def recurse(object, parent, depth):
        if depth > levels:
            return
        print("  " * depth, object.name)

        for child in object.children:
            recurse(child, object,  depth + 1)
    try: recurse(object, object.parent, 0)
    except Exception:
        traceback.print_exc()
        print("exception")
        return

def printHierarchy2(object, levels=10, list=None):
    def recurse(object, parent, depth, list):
        if(list == None):
            list = []
        if(object.type == 'MESH'):
            return object
        if depth > levels:
            print('return list 1')
            return list
        print("  " * depth, object.name)

        for child in object.children:
            list.append(recurse(child, object,  depth + 1, list))
    try: return recurse(object, object.parent, 0, list)
    except Exception:
        traceback.print_exc()
        print("exception")
        return list

if (propelAnimated != None and propelAnimated.type == 'EMPTY' and len(propelAnimated.children) > 0):
    #print(dir(propelAnimated))
    #print("My object exists and I can operate upon it.")

#    printHierarchy(propelAnimated)
    test = printHierarchy2(propelAnimated)

    print(test)

else:
    print("My object does not exist.")
函数
printHierarchy
按预期打印整个层次结构:

spreep\u动画
PS_1_玻璃钢
推进1×5xhi
TR5_48
TR5_49
TR5_50
TR5_51
TR5_52
TR5_53
TR5_54
TR5_55
TR5_56
TR5_57
TR5_58
TR5_59
PS_2_玻璃钢
推进_2_5xhi
TR5_72
TR5_73
TR5_74
TR5_75
TR5_76
TR5_77
TR5_78
TR5_79
TR5_80
TR5_81
TR5_82
TR5_83
PS_3_玻璃钢
推进_3_5xhi
TR5_60
TR5_61
TR5_62
TR5_63
TR5_64
TR5_65
TR5_66
TR5_67
TR5_68
TR5_69
TR5_70
TR5_71
PS_4_玻璃钢
推进_4_5xhi
TR5_84
TR5_85
TR5_86
TR5_87
TR5_88
TR5_89
TR5_90
TR5_91
TR5_92
TR5_93
TR5_94
TR5_95

现在,我试图让它返回
printHierarchy2
类型为
'MESH'
的对象列表,但它总是返回
None
,我不知道为什么,因为我至少希望它返回一个空列表。

递归函数中没有返回语句:

def printHierarchy2(对象,级别=10,列表=None):
def递归(对象、父对象、深度、列表):
如果(列表==无):
列表=[]
如果(object.type=='MESH'):
回波信号
如果深度>标高:
打印('返回列表1')
返回列表
打印(“*深度,对象名称)
对于object.children中的子对象:
追加(递归(子对象、对象、深度+1、列表))
#在这里换
返回列表
try:返回递归(object,object.parent,0,list)
除例外情况外:
traceback.print_exc()
打印(“例外”)
返回列表

递归函数中没有返回语句:

def printHierarchy2(对象,级别=10,列表=None):
def递归(对象、父对象、深度、列表):
如果(列表==无):
列表=[]
如果(object.type=='MESH'):
回波信号
如果深度>标高:
打印('返回列表1')
返回列表
打印(“*深度,对象名称)
对于object.children中的子对象:
追加(递归(子对象、对象、深度+1、列表))
#在这里换
返回列表
try:返回递归(object,object.parent,0,list)
除例外情况外:
traceback.print_exc()
打印(“例外”)
返回列表

Python按defaultOff返回None主题:强烈建议您避免将变量命名为与Python内置函数相同的名称,如
list
。至少,对于熟悉该语言并隐藏其通常含义的人来说,这会让人感到非常困惑——这也会使调试变得更加困难。Python通过defaultOff返回None主题:强烈建议您避免将变量命名为与Python内置函数相同的名称,如
list
。至少,对于熟悉该语言并隐藏其通常含义的人来说,这是非常令人困惑的——这也会使调试变得更加困难。哇,说真的,在这种语言中很难忽略这一点,谢谢。是的,缺少键入肯定是Python的一个缺点,但它的入门门槛也很低。您可以尝试一下类型提示:虽然我不确定它们是否有用。但我确实犯了一个错误,现在似乎是返回列表,但最后一个元素似乎也是列表?哇,说真的,在这种语言中很难忽略这一点,谢谢。是的,缺少类型肯定是Python的一个缺点,但这也是低门槛的进入。您可以尝试一下类型提示:虽然我不确定它们是否有用。但我确实犯了一个错误,现在似乎是返回列表,但最后一个元素似乎也是列表?