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

String ComparisonL: 'TITLE' == 'TITLE' returns False, but 'TITLE' in 'TITLE' returns True

提问人:Alon Parag 提问时间:1/6/2021 最后编辑:Alon Parag 更新时间:1/8/2021 访问量:54

问:

我想知道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',trig_type,'trigger')
            return DescriptionTrigger(arg1)
        elif trig_type ==  'AFTER​':
            print('>>entering',trig_type,'trigger')
            return AfterTrigger(arg1)
        elif trig_type ==  'BEFORE​':
            print('>>entering',trig_type,'trigger')
            return BeforeTrigger(arg1)
        elif trig_type ==  'NOT​':
            print('>>entering',trig_type,'trigger')
            return NotTrigger(arg1)
        elif trig_type ==  'AND​':
            print('>>entering',trig_type,'trigger')
            return AndTrigger(arg1, arg2)
        elif trig_type ==  'OR':
            print('>>entering',trig_type,'trigger')
            return OrTrigger(arg1, arg2)

其中当运算符返回时,当我使用 .但是当我使用它时,它会返回. 是什么导致了这种行为?在这种情况下,最佳实践是什么trig_type='TITLE'==Falsestr.__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,arg1, arg2=None):
        """
        Assumes:
             trig_type: str which is either TITLE​, DESCRIPTION​, AFTER​, BEFORE​, NOT​, AND​, OR​
        Returns:
             correspoding trigger object
        """
        
        print('checking if',trig_type,'== 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()
python-3.x 字符串 相等

评论

0赞 Dai 1/6/2021
这在 Python 的文档中进行了解释。你没有先检查有什么原因吗?
1赞 Klaus D. 1/6/2021
向我们展示你调用该函数。
2赞 Matthias 1/6/2021
显然不包含你认为它包含的内容。它可能是 or 或其他一些值。做并检查结果。trig_type'TITLE ''TITLE\n'print(repr(trig_type))
2赞 Charles Duffy 1/8/2021
你能把它变成一个最小的可重现的例子吗--我们可以自己运行代码,不做任何改动就能看到问题所在,删除所有不相关或不相关的内容?(取出文件 I/O,而是对代码本身中导致问题的数据值进行硬编码,这将对使代码自包含大有裨益)。
1赞 user2357112 1/8/2021
你有一个零宽度的空间。'TITLE​'

答: 暂无答案