本文整理汇总了Python中ast.IsNot方法的典型用法代码示例。如果您正苦于以下问题:Python ast.IsNot方法的具体用法?Python ast.IsNot怎么用?Python ast.IsNot使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ast
的用法示例。
在下文中一共展示了ast.IsNot方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: comp_op_rewrite
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def comp_op_rewrite(op: t.Union[Tokenizer, t.List[Tokenizer]]):
"""
('<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not')
"""
if isinstance(op, list):
op = tuple(map(lambda it: it.value, op))
else:
op = op.value
return {
'<': ast.Lt,
'>': ast.Gt,
'==': ast.Eq,
'>=': ast.GtE,
'<=': ast.LtE,
'<>': lambda: raise_exp(NotImplemented),
'!=': ast.NotEq,
'in': ast.In,
('is', ): ast.Is,
('is', 'not'): ast.IsNot,
('not', 'in'): ast.NotIn,
}[op]()
示例2: _process_is_literal
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def _process_is_literal(
tokens: List[Token],
i: int,
compare: Union[ast.Is, ast.IsNot],
) -> None:
while tokens[i].src != 'is':
i -= 1
if isinstance(compare, ast.Is):
tokens[i] = tokens[i]._replace(src='==')
else:
tokens[i] = tokens[i]._replace(src='!=')
# since we iterate backward, the dummy tokens keep the same length
i += 1
while tokens[i].src != 'not':
tokens[i] = Token('DUMMY', '')
i += 1
tokens[i] = Token('DUMMY', '')
示例3: visit_Assert
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def visit_Assert(self, node):
if is_binary_comparison(node):
if is_comparison_type(node, ast.Eq):
return make_call_node(node, assert_equal.__name__)
elif is_comparison_type(node, ast.NotEq):
return make_call_node(node, assert_not_equal.__name__)
elif is_comparison_type(node, ast.In):
return make_call_node(node, assert_in.__name__)
elif is_comparison_type(node, ast.NotIn):
return make_call_node(node, assert_not_in.__name__)
elif is_comparison_type(node, ast.Is):
return make_call_node(node, assert_is.__name__)
elif is_comparison_type(node, ast.IsNot):
return make_call_node(node, assert_is_not.__name__)
elif is_comparison_type(node, ast.Lt):
return make_call_node(node, assert_less_than.__name__)
elif is_comparison_type(node, ast.LtE):
return make_call_node(node, assert_less_than_equal_to.__name__)
elif is_comparison_type(node, ast.Gt):
return make_call_node(node, assert_greater_than.__name__)
elif is_comparison_type(node, ast.GtE):
return make_call_node(node, assert_greater_than_equal_to.__name__)
return node
示例4: __init__
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def __init__(self) -> None:
self.dicts: Dict[Offset, ListCompOrGeneratorExp] = {}
self.sets: Dict[Offset, ast.expr] = {}
self.set_empty_literals: Dict[Offset, ListOrTuple] = {}
self.is_literal: Dict[Offset, Union[ast.Is, ast.IsNot]] = {}
示例5: visit_Compare
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def visit_Compare(self, node: ast.Compare) -> None:
left = node.left
for op, right in zip(node.ops, node.comparators):
if (
isinstance(op, (ast.Is, ast.IsNot)) and
(
isinstance(left, LITERAL_TYPES) or
isinstance(right, LITERAL_TYPES)
)
):
self.is_literal[_ast_to_offset(right)] = op
left = right
self.generic_visit(node)
示例6: invert
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def invert(node):
"""
Invert the operation in an ast node object (get its negation).
Args:
node: An ast node object.
Returns:
An ast node object containing the inverse (negation) of the input node.
"""
inverse = {ast.Eq: ast.NotEq,
ast.NotEq: ast.Eq,
ast.Lt: ast.GtE,
ast.LtE: ast.Gt,
ast.Gt: ast.LtE,
ast.GtE: ast.Lt,
ast.Is: ast.IsNot,
ast.IsNot: ast.Is,
ast.In: ast.NotIn,
ast.NotIn: ast.In}
if type(node) == ast.Compare:
op = type(node.ops[0])
inverse_node = ast.Compare(left=node.left, ops=[inverse[op]()],
comparators=node.comparators)
elif isinstance(node, ast.BinOp) and type(node.op) in inverse:
op = type(node.op)
inverse_node = ast.BinOp(node.left, inverse[op](), node.right)
elif type(node) == ast.NameConstant and node.value in [True, False]:
inverse_node = ast.NameConstant(value=not node.value)
else:
inverse_node = ast.UnaryOp(op=ast.Not(), operand=node)
return inverse_node
示例7: test_correct_comparing
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def test_correct_comparing(self, node: Any = None) -> None:
if not node:
return
if isinstance(node, Iterable):
for item in node:
self.test_correct_comparing(item)
return
if isinstance(node, ast.Expr):
self.test_correct_comparing(node.value)
return
if isinstance(node, ast.BinOp):
self.test_correct_comparing(node.left)
self.test_correct_comparing(node.right)
return
if isinstance(node, ast.BoolOp):
for val in node.values:
self.test_correct_comparing(val)
return
if isinstance(node, ast.IfExp):
self.test_correct_comparing(node.body)
self.test_correct_comparing(node.test)
self.test_correct_comparing(node.orelse)
return
if isinstance(node, ast.Compare):
if isinstance(node.left, ast.Name):
comparator = node.comparators[0]
operation = node.ops[0]
if isinstance(operation, ast.Is) or isinstance(operation, ast.IsNot):
# Is or IsNot are allowed for NameConstant - None - only
if isinstance(comparator, ast.NameConstant) and comparator.value is None:
return
node_text = self.stringify_node(node)
self.warnings.append(f'Checking "{node_text}" '
'is unsafe, use "==" operator instead')
self.test_correct_comparing(comparator)
示例8: visit_Compare
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def visit_Compare(self, node: ast.Compare) -> Any:
"""Recursively visit the comparators and apply the operations on them."""
# pylint: disable=too-many-branches
left = self.visit(node=node.left)
comparators = [self.visit(node=comparator) for comparator in node.comparators]
result = None # type: Optional[Any]
for comparator, op in zip(comparators, node.ops):
if isinstance(op, ast.Eq):
comparison = left == comparator
elif isinstance(op, ast.NotEq):
comparison = left != comparator
elif isinstance(op, ast.Lt):
comparison = left < comparator
elif isinstance(op, ast.LtE):
comparison = left <= comparator
elif isinstance(op, ast.Gt):
comparison = left > comparator
elif isinstance(op, ast.GtE):
comparison = left >= comparator
elif isinstance(op, ast.Is):
comparison = left is comparator
elif isinstance(op, ast.IsNot):
comparison = left is not comparator
elif isinstance(op, ast.In):
comparison = left in comparator
elif isinstance(op, ast.NotIn):
comparison = left not in comparator
else:
raise NotImplementedError("Unhandled op of {}: {}".format(node, op))
if result is None:
result = comparison
else:
result = result and comparison
left = comparator
self.recomputed_values[node] = result
return result
示例9: COMPARE
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def COMPARE(self, node):
left = node.left
for op, right in zip(node.ops, node.comparators):
if (
isinstance(op, (ast.Is, ast.IsNot)) and (
_is_const_non_singleton(left) or
_is_const_non_singleton(right)
)
):
self.report(messages.IsLiteral, node)
left = right
self.handleChildren(node)
示例10: p_comp_op_10
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def p_comp_op_10(p):
'''comp_op : IS NOT'''
# 1 2
p[0] = ast.IsNot(rule=inspect.currentframe().f_code.co_name)
# expr: xor_expr ('|' xor_expr)*
示例11: _
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def _(
src=each("assert x == y", "assert x is y", "assert x < y", "assert x is not y"),
node_type=each(ast.Eq, ast.Is, ast.Lt, ast.IsNot),
):
assert_node = ast.parse(src).body[0]
assert is_comparison_type(assert_node, node_type)
示例12: _check_constant
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def _check_constant(self, op: ast.cmpop, comparator: ast.expr) -> None:
if not isinstance(op, (ast.Eq, ast.NotEq, ast.Is, ast.IsNot)):
return
real = get_assigned_expr(comparator)
if not isinstance(real, (ast.List, ast.Dict, ast.Tuple)):
return
length = len(real.keys) if isinstance(
real, ast.Dict,
) else len(real.elts)
if not length:
self.add_violation(FalsyConstantCompareViolation(comparator))
示例13: _check_is_constant_comprare
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def _check_is_constant_comprare(
self,
op: ast.cmpop,
comparator: ast.expr,
) -> None:
if not isinstance(op, (ast.Is, ast.IsNot)):
return
unwrapped = operators.unwrap_unary_node(
get_assigned_expr(comparator),
)
if isinstance(unwrapped, self._forbidden_for_is):
self.add_violation(WrongIsCompareViolation(comparator))
示例14: visit_Compare
# 需要导入模块: import ast [as 别名]
# 或者: from ast import IsNot [as 别名]
def visit_Compare(self, node: ast.Compare) -> ast.AST:
"""Compare nodes are ``==, >=, is, in`` etc. There are multiple Compare categories."""
self.generic_visit(node)
log_header = f"visit_Compare: {self.src_file}:"
# taking only the first operation in the compare node
# in basic testing, things like (a==b)==1 still end up with lists of 1,
# but since the AST docs specify a list of operations this seems safer.
# idx = LocIndex("CompareIs", node.lineno, node.col_offset, type(node.ops[0]))
cmpop_is_types: Set[type] = {ast.Is, ast.IsNot}
cmpop_in_types: Set[type] = {ast.In, ast.NotIn}
op_type = type(node.ops[0])
node_span = NodeSpan(node)
locidx_kwargs = {
"lineno": node_span.lineno,
"col_offset": node_span.col_offset,
"op_type": op_type,
"end_lineno": node_span.end_lineno,
"end_col_offset": node_span.end_col_offset,
}
if op_type in cmpop_is_types:
idx = LocIndex(ast_class="CompareIs", **locidx_kwargs) # type: ignore
elif op_type in cmpop_in_types:
idx = LocIndex(ast_class="CompareIn", **locidx_kwargs) # type: ignore
else:
idx = LocIndex(ast_class="Compare", **locidx_kwargs) # type: ignore
self.locs.add(idx)
if idx == self.target_idx and self.mutation and not self.readonly:
LOGGER.debug("%s mutating idx: %s with %s", log_header, self.target_idx, self.mutation)
# TODO: Determine when/how this case would actually be called
if len(node.ops) > 1:
# unlikely test case where the comparison has multiple values
LOGGER.debug("%s multiple compare ops in node, len: %s", log_header, len(node.ops))
existing_ops = [i for i in node.ops]
mutation_ops = [self.mutation()] + existing_ops[1:]
return ast.copy_location(
ast.Compare(left=node.left, ops=mutation_ops, comparators=node.comparators),
node,
)
else:
# typical comparison case, will also catch (a==b)==1 as an example.
LOGGER.debug("%s single comparison node operation", log_header)
return ast.copy_location(
ast.Compare(
left=node.left, ops=[self.mutation()], comparators=node.comparators
),
node,
)
LOGGER.debug("%s (%s, %s): no mutations applied.", log_header, node.lineno, node.col_offset)
return node