在Python中接收警告时如何做*自定义*操作?



我有一个脚本,它遍历数千个csv并将它们读入pandas,然后在一行中执行一堆其他操作。

每隔一段时间,我收到这样的消息:

sys:1: DtypeWarning:列(10,11,23)有混合类型。

在导入时指定dtype选项或设置low_memory=False。我尝试了try/except语句,但是它没有被捕获,因为它是一个警告而不是一个异常。

有没有办法像:

那样做
try:
df = pd.read_csv(file_path)
except pd.errors.DtypeWarning:
df = pd.read_csv(file_path, low_memory=False)

我只想使用low_memory=False,如果我在特定的文件上得到警告,而不是其他数千个文件

我也不能设置所有的列dtypes,因为许多csv文件有不同的列/数据/等。

我不想设置警告。simplefilter('error', pd.errors.DtypeWarning),因为它看起来有点过分。如果我没有捕捉到它,我不希望其他的DtypeWarning在某处阻止它运行。

warnings.simplefilter的存在正是为了这个目的。在警告处理程序中,您可以设置条件以确保不会捕获不需要的警告。

如果警告只"偶尔"那么您可能希望在警告处理程序代码上浪费太多的运行时间。

最新更新