简体   繁体   English

如何在 try-except 语句中使用 MergeError?

[英]How to use MergeError in try-except statement?

I was making a program for merging tables 1-1, and wanted to use concat by try-except statement if validate='one-to-one' doesn't work.我正在制作一个合并表 1-1 的程序,如果 validate='one-to-one' 不起作用,我想通过 try-except 语句使用 concat。

However, I failed to use MergeError in "except MergeError as e:" code.但是,我未能在“除了 MergeError 作为 e:”代码中使用 MergeError。

Since the actual code I am writing is too long, I made a simple example of my problem.由于我写的实际代码太长,我就我的问题做了一个简单的例子。 In the below code, if I use在下面的代码中,如果我使用

result = pd.merge(left, right, on='B', how='outer', validate="one_to_one") result = pd.merge(left, right, on='B', how='outer', validate="one_to_one")

, it returns me MergeError. ,它返回给我 MergeError。

But, for the try-except code, it doesn't handle the MergeError case.但是,对于 try-except 代码,它不处理 MergeError 情况。 It returns me another error, named NameError.它返回另一个错误,名为 NameError。

Is there any method to handle with MergeError?有什么方法可以处理 MergeError 吗?

import pandas as pd

left = pd.DataFrame({'A' : [1,2], 'B' : [1, 2]})
right = pd.DataFrame({'A' : [4,5,6], 'B': [2, 2, 2]})

try:
    result = pd.merge(left, right, on='B', how='outer', validate="one_to_one")
except MergeError as e:
    print("ok ",e)





MergeError                                Traceback (most recent call last)
<ipython-input-1-2a4c90911337> in <module>()
      6 try:
----> 7     result = pd.merge(left, right, on='B', how='outer', 
validate="one_to_one")
      8 except MergeError as e:

~\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in merge(left, 
right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, 
copy, indicator, validate)
     59                          copy=copy, indicator=indicator,
---> 60                          validate=validate)
     61     return op.get_result()

~\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in 
__init__(self, left, right, how, on, left_on, right_on, axis, left_index, 
right_index, sort, suffixes, copy, indicator, validate)
    559         if validate is not None:
--> 560             self._validate(validate)
    561 

~\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in 
_validate(self, validate)
   1079             elif not right_unique:
-> 1080                 raise MergeError("Merge keys are not unique in 
right dataset;"
   1081                                  " not a one-to-one merge")

MergeError: Merge keys are not unique in right dataset; not a one-to-one 
merge

During handling of the above exception, another exception occurred:

NameError                                 Traceback (most recent call last)
<ipython-input-1-2a4c90911337> in <module>()
      6 try:
      7     result = pd.merge(left, right, on='B', how='outer', validate="one_to_one")
----> 8 except MergeError as e:
      9     print("ok ",e)

NameError: name 'MergeError' is not defined

Use this:用这个:

except pd.errors.MergeError as e:

Or alternatively, import the name at top:或者,在顶部导入名称:

from pd.errors import MergeError

您需要MergeError其包含的模块中导入MergeError ,然后才能按名称捕获它。

from pandas.errors import MergeError

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

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