我的python电影数据库代码有什么问题?

时间:2014-11-01 22:44:36

标签: python dictionary load eval

我正在寻找一些帮助,我正在编写一个供个人使用的程序。它应该将电影的名称和等级(存储在字典中)导出到外部文件(file.txt),然后在每次运行开始时加载它。它还应该导出电影的名称并查看(也是字典)到另一个外部文件(review.txt)。我在读取file.txt并将其放入基础的行中出错。有线索吗?

base = {}
#Open and write info to base
with open('file.txt','r') as f:
    # Error here :(
    base = eval(f.read())

错误消息:

Traceback (most recent call last):
  File "/Users/Will/Documents/movie_database.py", line 18, in <module>
    base = eval(f.read())
  File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing

1 个答案:

答案 0 :(得分:2)

您的文件为空,因此eval()会抛出异常,因为找不到Python表达式:

>>> eval('')  # empty string
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing

你不应该首先使用eval(),但是这里的安全隐患是可怕的。可以欺骗你加载任意文件的人现在可以接管你的Python进程,并将你的机器变成垃圾邮件僵尸僵尸。

jsonshelve(或直接使用pickle,虽然这也有安全隐患),但它会为您提供更好,更强大的序列化选项。您还可以考虑使用sqlite3作为SQL数据库选项。