python-3.x 无法在www.example.com API上创建文件夹mega.py

mrfwxfqh  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(140)

enter image description here这是我在执行代码时遇到的错误。

zxlwwiss

zxlwwiss1#

https://github.com/odwyersoftware/mega.py/issues/15我在他们的github页面上找到了一个临时的工作。

mqkwyuun

mqkwyuun2#

总结

问题出在find_path_descriptor函数中(行:289)在mega.py封装中。

调试

1.我注解了第305到309行

# if (file[1]['a'] and file[1]['t']
#         and file[1]['a']['n'] == foldername):
#     if parent_desc == file[1]['p']:
#         parent_desc = file[0]
#         found = True

1.在此之上(行:305)我在下面插入了一行,返回file[1]['a']及其类型

print(type(file[1]['a']), file[1]['a'])

1.我调用了find_path_descriptor函数

m.find_path_descriptor("test")

下面是输出:(我用“名称-i”、“字符串-i”和“值-i”替换了这些值,以隐藏我的大型文件的信息)

<class 'dict'> {'n': 'name-1'}
<class 'dict'> {'n': 'name-2'}
<class 'dict'> {'n': 'name-3'}
<class 'dict'> {'c': 'value-4', 'n': 'name-4'}
<class 'dict'> {'c': 'value-5', 'n': 'name-5'}
<class 'dict'> {'c': 'value-6', 'n': 'name-6'}
...
<class 'dict'> {'c': 'value-23', 'n': 'name-23'}
<class 'dict'> {'c': 'value-24', 'n': 'name-24'}
<class 'str'> 'string-25'
<class 'str'> 'string-26'
<class 'str'> 'string-27'

如你所见,有时file[1]['a']<class 'dict'>,但有时它是<class 'str'><class 'str'>导致TypeError: string indices must be integers
当您尝试使用字符串值而不是索引号访问字符时,会出现TypeError: string indices must be integers错误。
这正是find_path_descriptor尝试访问'n'密钥时所发生的情况,如下所示:file[1]['a']['n'](因为它期望file[1]['a']<class 'dict'>)。这就是为什么会出现错误。

修复

  • 在应用修复之前,不要忘记撤消步骤1和步骤2
  • 删除打印行(行:第305段)
  • 取消注解行305:309
  • 在for语句主体的顶部插入以下行(第行:305)来验证file[1]['a']是否是<class 'dict'>,否则跳过它,使用continue
if (not (type(file[1]['a']) is dict)):
    continue

现在,您的find_path_descriptor函数应该如下所示:

def find_path_descriptor(self, path, files=()):
        """
        Find descriptor of folder inside a path. i.e.: folder1/folder2/folder3
        Params:
            path, string like folder1/folder2/folder3
        Return:
            Descriptor (str) of folder3 if exists, None otherwise
        """
        paths = path.split('/')

        files = files or self.get_files()
        parent_desc = self.root_id
        found = False
        for foldername in paths:
            if foldername != '':
                for file in files.items():
                    if (not (type(file[1]['a']) is dict)):
                        continue
                    if (file[1]['a'] and file[1]['t']
                            and file[1]['a']['n'] == foldername):
                        if parent_desc == file[1]['p']:
                            parent_desc = file[0]
                            found = True
                if found:
                    found = False
                else:
                    return None
        return parent_desc

相关问题