Предупреждение об устаревании с readPlist & AttributeError - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь найти способ доступа к файлу 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'

Я предполагаю, что использование функции загрузки довольно просто, хотя мне было трудно разобраться в ней, используя учебники, которые я нашел в Интернете, чтобы изменить ее для своих нужд.

Что касается логической ошибки AttributeError, я понятия не имею, что я делаю неправильно.

Спасибо!

1 Ответ

0 голосов
/ 29 октября 2018

Чтобы избавиться от ошибки устаревания, замените строку, содержащую readPlist, на

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

Похоже, ваша вторая проблема связана с изменением plistlib :

Изменено в версии 3.7: Значения Dict в результате теперь являются обычными. Вы больше не можете использовать атрибут доступа для доступа к элементам этих словарей.

У меня была похожая проблема: AttributeError: 'dict' object has no attribute 'children' была решена заменой вхождений someObj.children[:] на someObj['children']. Полагаю, что-то похожее может иметь место с вашим звонком на right.values(), но трудно сказать без реального примера ожидаемого вами списка.

...