带有readPlist和AttributeError的DeprecationWarning

时间:2018-09-05 03:20:23

标签: python boolean plist attributeerror

我试图找到一种访问plist文件的方法:/Library/Preferences/com.apple.iPod.plist以访问其中的序列号。

这是我当前的代码-

import os
import plistlib

fileName=os.path.expanduser('/Users/Ryan/Library/Preferences/com.apple.iPod.plist')

pl=plistlib.readPlist(fileName)

for left, right in pl.items(): 
   for values in right.values():
         print(values['Serial Number'])

我一直在获取结果,但也会弹出一些快速错误。我得到这个:

plist.py:8: DeprecationWarning: The readPlist function is deprecated, use load() instead pl=plistlib.readPlist(fileName)

还有这个:

  File "plist.py", line 16, in <module>
    for values in right.values():
   AttributeError: 'bool' object has no attribute 'values'

我猜想使用load函数非常简单,尽管我很难通过网上找到的教程来解决它,以满足我的需要。

关于布尔AttributeError,我不知道我在做什么错。

谢谢!

1 个答案:

答案 0 :(得分:0)

要摆脱折旧错误,请将包含readPlist的行替换为

with open(fileName, 'rb') as f:
    pl = plistlib.load(f)

您的第二个问题似乎是由于plistlib的变化引起的:

  

在3.7版中进行了更改:结果中的Dict值现在是普通dict。您不再可以使用属性访问来访问这些词典的项目。

我有一个类似的问题:AttributeError: 'dict' object has no attribute 'children'通过用someObj.children[:]替换someObj['children']的出现而得到解决。我想您对right.values()的调用可能会发生类似的情况,但是如果没有您期望的plist的实际示例,很难说出来。