繁体   English   中英

Python:FileNotFoundError 未被 try-except 块捕获

[英]Python: FileNotFoundError not caught by try-except block

最近我开始学习 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)

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

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

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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM