Ошибка ast.literal_eval при импорте словаря Python из внешнего файла в основной файл - PullRequest
0 голосов
/ 06 июня 2019

До сих пор я преобразовал словарь в серию списков и ознакомился с документацией и несколькими вопросами по SO.Я немного сбит с толку, потому что словарь - это одна из допустимых структур, которую может обрабатывать ast.literal_eval().

содержимое файла внешнего словаря:

reports={
dict(DatabaseReports1='reports/dr_d1?'),
dict(DatabaseReports2='reports/dr_d2?'),
dict(DatabaseReports3='reports/dr_d3?'),
dict(TitleReports='reports/tr?'),
dict(BookReport1='reports/tr_b1?'),
dict(BookReport2='reports/tr_b2?'),
dict(BookReport3='reports/tr_b3?'),
dict(JournalReport1='reports/tr_j1?'),
dict(JournalReport2='reports/tr_j2?'),
}

содержимое основного файла:

with open('dictionaryFile.py', 'r') as f2:
        rs = f2.read()
        report=ast.literal_eval(rs)

Я ожидаю преобразовать файл из строки в словарь, используя ast, но я получаю ошибку ниже:

Traceback (most recent call last):
  File "mainFile.py", line 4, in <module>
   __import__("reportOptions")
  File "dictionaryFile.py", line 11, in <module>
    dict(JournalReport2='reports/tr_j2?'),
TypeError: unhashable type: 'dict'

1 Ответ

0 голосов
/ 06 июня 2019

Вы определили set из dict, поэтому вы получаете ошибку. Вместо этого определите dict, как это.

Более того, при использовании ast.literal_eval() вы не можете выполнять назначения, поэтому избавьтесь от report=.

{
    'DatabaseReports': 'reports/dr_d1?',
    'DatabaseReports2': 'reports/dr_d2?',
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...