Код: Выделить всё
from typing import Union
import json
def read_json_file(filename)->Union[dict, list]:
with open(filename) as f:
return json.load(f)
Код: Выделить всё
def get_name_list()->list:
return read_json_file("name_list.json")
Я попробовал несколько решений вроде:
[code]def read_json_file(filename, ensure_type)->Union[dict, list]:
with open(filename) as f:
answer = json.load(f)
hack:ensure_type = answer
return hack
def get_name_list()->list:
return read_json_file("name_list.json", ensure_type=list)
Неудовлетворительное решение 2
ChatGPT рекомендовал мне такое решение:< /p>
Код: Выделить всё
from typing import TypeVar, Union, List, Dict, Type
import json
T = TypeVar('T', List, Dict)
def read_json(filename, ensure_type: Type[T]=str) -> T:
with open(filename) as f:
answer = json.load(f)
if ensure_type != str:
assert(isinstance(answer, ensure_type))
answer: T = answer
return answer
def get_list() -> List:
return read_json("name_list.json", ensure_type=list)
def get_json(filename):
return read_json(filename)
foo = get_list()
print(foo)
bar = get_json("bonjour.json")
print(bar)
Неудовлетворительное решение 3
Я могу это сделать :
Код: Выделить всё
def read_list():
answer:list = read_json_file("name_list.json") #type:ignore
return answer
Подробнее здесь: https://stackoverflow.com/questions/758 ... cular-case