字符串比较L:'TITLE' == 'TITLE' 返回 False,但 'TITLE' 中的 'TITLE' 返回 True

问题描述

我想知道 python 的这种行为, 我有以下功能

def create_trigger(trig_type,arg1,arg2=None):
        """
        Assumes:
             trig_type: str which is either TITLE​,DESCRIPTION​,AFTER​,BEFORE​,NOT​,AND​,OR​
        Returns:
             correspoding trigger object
        """
        if trig_type == 'TITLE​':
            print('>>entering',trig_type,'trigger')
            return TitleTrigger(arg1)
        elif trig_type ==  'DESCRIPTION​':
            print('>>entering','trigger')
            return DescriptionTrigger(arg1)
        elif trig_type ==  'AFTER​':
            print('>>entering','trigger')
            return AfterTrigger(arg1)
        elif trig_type ==  'BEFORE​':
            print('>>entering','trigger')
            return BeforeTrigger(arg1)
        elif trig_type ==  'NOT​':
            print('>>entering','trigger')
            return Nottrigger(arg1)
        elif trig_type ==  'AND​':
            print('>>entering','trigger')
            return AndTrigger(arg1,arg2)
        elif trig_type ==  'OR':
            print('>>entering','trigger')
            return OrTrigger(arg1,arg2)

其中当 trig_type='TITLE'== 运算符返回 False,当我使用 str.__eq__() 时也是如此。但是当我使用 trig_type in 'TITLE' 时它返回 True。 是什么导致了这种行为?这种情况下的最佳做法是什么

编辑:

下面是一个最小的可重现示例

def read_trigger_config():
    """
    filename: the name of a trigger configuration file

    Returns: a list of trigger objects specified by the trigger configuration
        file.
    """
    class TitleTrigger(object):
        """
        mock class of TittleTrigger
        """
        def __init__(self,phrase):
            self.__phrase = phrase

    def create_trigger(trig_type,OR​
        Returns:
             correspoding trigger object
        """
        
        print('checking if','== TITLE',trig_type == 'TITLE​')
        if trig_type == 'TITLE​':
            return TitleTrigger(arg1)
            
    lines = [['t1','TITLE','election']]
    triggers_dict = {}

    print(lines)
    for line in lines:
        if line[0] != 'ADD':
            if not line[1] in ('NOT','AND','OR'):
                triggers_dict[line[0]] = create_trigger(line[1],line[2])
            else:

                triggers_dict[line[0]]=create_trigger(line[1],triggers_dict[line[2]],triggers_dict[line[3]])
    print(triggers_dict)

read_trigger_config()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)