问题描述
我正在尝试使用 Python 3 类型提示,以使我的代码更简洁。每当我尝试通过 mypy 传递我的代码时,都会出现一些重复的错误,提到有关 Optional 数据类型的内容,我不知道为什么。
def directory_to_dataframe(directory_name: str) -> pandas.DataFrame:
'''
Get the contents of a directory as a single dataframe.
:param directory_name: The directory to read
'''
# print(directory_name)
directory: str = os.path.join(CONTAINER_ROOT,directory_name)
def read_method(parquet: str) -> pandas.DataFrame:
return pandas.read_parquet(path=os.path.join(directory,parquet))
if not os.path.isdir(s=directory):
return pandas.DataFrame()
files_to_read: Iterator[str] = filter(
lambda filename: filename.endswith('.parquet'),os.listdir(path=directory))
try:
return pandas.concat(objs=map(read_method,files_to_read),verify_integrity=True,ignore_index=True).fillna(value=0) # Mypy raises error
except ValueError:
return pandas.DataFrame()
Mypy 抱怨 Incompatible return value type (got "Optional[DataFrame]",expected "DataFrame")
我认为 pandas.concat()
将始终返回一个数据帧,所以我不明白为什么返回类型必须是 Optional(这意味着 None
返回的可能性)。
这是另一个类似的案例。
daily_count: pandas.DataFrame = pandas.DataFrame(data=daily_ids['ID'].value_counts()).reset_index()
Mypy 抱怨 expression has type "Optional[DataFrame]",variable has type "DataFrame"
所以我缺少一些关于何时将 Optional
应用于变量或函数返回类型以使 mypy 满意的信息。此外,如果我确实应用了 Optional
,那么在涉及该变量的任何进一步操作中,MyPy 会抱怨该操作对 None
类型无效。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)