【问题标题】:Python: FileNotFoundError not caught by try-except blockPython:FileNotFoundError 未被 try-except 块捕获
【发布时间】:2020-05-09 14:49:16
【问题描述】:

最近我开始学习 Python,遇到了一个我找不到答案的问题。 该程序的想法是询问用户名,从 JSON 文件加载字典,如果名称在字典中 - 打印用户最喜欢的数字。

加载 JSON 文件的代码如下所示:

import json

fav_numbers = {}
filename = 'numbers.JSON'

name = input('Hi, what`s your name? ')
try:
    with open(filename) as f_obj:
        fav_numbers = json.load(f_obj)
except FileNotFoundError:
    pass

if name in fav_numbers.keys():    

    print('Hi {}, your fav number is {}, right?'.format(name, fav_numbers[name]))

else:
    number = input('Hi {}, what`s your favourte number? '.format(name))
    fav_numbers[name] = number

    with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, filename)

不过,当我尝试运行它时,它崩溃了,告诉我:

Exception has occurred: FileNotFoundError
[Errno 2] No such file or directory: 'numbers.JSON'
  File "/home/niedzwiedx/Dokumenty/Python/ulubionejson.py", line 22, in <module>
    with open(filename) as f_obj:

我做错了什么来捕获异常? (已尝试将 FileNotFoundError 更改为 OSError 或 IOError)

【问题讨论】:

  • 无法复制。这真的是你所有的代码吗?
  • 错误可能来自代码中的其他地方。您能否提供更多代码和错误的完整回溯?
  • 其实这信息还不够
  • 感谢您的快速回复。我添加了完整的代码和错误消息。
  • 您编辑的代码不应与提供的错误匹配。如果该文件不存在,则在访问 if fav_numbers[name]: 时,它应该在第 13 行失败,并带有 KeyError 至于您编辑的问题:第 22 行未包含在 try..except 块中,只有第 8 行和第 9 行。

标签: python exception try-catch file-not-found


【解决方案1】:

错误来自你的最后一行,在你的 try/except 之外

with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, filename)

文件名是字符串,不是文件。

你必须使用

with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, f_obj)

为了更加安全,你也可以用 try/except 包围这部分

try:
    with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, f_obj)
except (FileNotFoundError, PremissionError):
    print("Impossible to create JSON file to save data")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多