Предупреждение об устаревании с readPlist & AttributeError

1

Я пытаюсь найти способ доступа к файлу plist: /Library/Preferences/com.apple.iPod.plist для доступа к серийным номерам в нем.

Вот мой текущий code--

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, я не знаю, что я делаю неправильно.

Спасибо!

Теги:
boolean
attributeerror
plist

1 ответ

0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню