""" Violation: Prefer TypeError when relevant. """ def incorrect_basic(some_arg): if isinstance(some_arg, int): pass else: raise Exception("...") # should be typeerror def incorrect_multiple_type_check(some_arg): if isinstance(some_arg, (int, str)): pass else: raise Exception("...") # should be typeerror class MyClass: pass def incorrect_with_issubclass(some_arg): if issubclass(some_arg, MyClass): pass else: raise Exception("...") # should be typeerror def incorrect_with_callable(some_arg): if callable(some_arg): pass else: raise Exception("...") # should be typeerror def incorrect_ArithmeticError(some_arg): if isinstance(some_arg, int): pass else: raise ArithmeticError("...") # should be typeerror def incorrect_AssertionError(some_arg): if isinstance(some_arg, int): pass else: raise AssertionError("...") # should be typeerror def incorrect_AttributeError(some_arg): if isinstance(some_arg, int): pass else: raise AttributeError("...") # should be typeerror def incorrect_BufferError(some_arg): if isinstance(some_arg, int): pass else: raise BufferError # should be typeerror def incorrect_EOFError(some_arg): if isinstance(some_arg, int): pass else: raise EOFError("...") # should be typeerror def incorrect_ImportError(some_arg): if isinstance(some_arg, int): pass else: raise ImportError("...") # should be typeerror def incorrect_LookupError(some_arg): if isinstance(some_arg, int): pass else: raise LookupError("...") # should be typeerror def incorrect_MemoryError(some_arg): if isinstance(some_arg, int): pass else: # should be typeerror # not multiline is on purpose for fix raise MemoryError( "..." ) def incorrect_NameError(some_arg): if isinstance(some_arg, int): pass else: raise NameError("...") # should be typeerror def incorrect_ReferenceError(some_arg): if isinstance(some_arg, int): pass else: raise ReferenceError("...") # should be typeerror def incorrect_RuntimeError(some_arg): if isinstance(some_arg, int): pass else: raise RuntimeError("...") # should be typeerror def incorrect_SyntaxError(some_arg): if isinstance(some_arg, int): pass else: raise SyntaxError("...") # should be typeerror def incorrect_SystemError(some_arg): if isinstance(some_arg, int): pass else: raise SystemError("...") # should be typeerror def incorrect_ValueError(some_arg): if isinstance(some_arg, int): pass else: raise ValueError("...") # should be typeerror def incorrect_not_operator_isinstance(some_arg): if not isinstance(some_arg): pass else: raise Exception("...") # should be typeerror def incorrect_and_operator_isinstance(arg1, arg2): if isinstance(some_arg) and isinstance(arg2): pass else: raise Exception("...") # should be typeerror def incorrect_or_operator_isinstance(arg1, arg2): if isinstance(some_arg) or isinstance(arg2): pass else: raise Exception("...") # should be typeerror def incorrect_multiple_operators_isinstance(arg1, arg2, arg3): if not isinstance(arg1) and isinstance(arg2) or isinstance(arg3): pass else: raise Exception("...") # should be typeerror def incorrect_not_operator_callable(some_arg): if not callable(some_arg): pass else: raise Exception("...") # should be typeerror def incorrect_and_operator_callable(arg1, arg2): if callable(some_arg) and callable(arg2): pass else: raise Exception("...") # should be typeerror def incorrect_or_operator_callable(arg1, arg2): if callable(some_arg) or callable(arg2): pass else: raise Exception("...") # should be typeerror def incorrect_multiple_operators_callable(arg1, arg2, arg3): if not callable(arg1) and callable(arg2) or callable(arg3): pass else: raise Exception("...") # should be typeerror def incorrect_not_operator_issubclass(some_arg): if not issubclass(some_arg): pass else: raise Exception("...") # should be typeerror def incorrect_and_operator_issubclass(arg1, arg2): if issubclass(some_arg) and issubclass(arg2): pass else: raise Exception("...") # should be typeerror def incorrect_or_operator_issubclass(arg1, arg2): if issubclass(some_arg) or issubclass(arg2): pass else: raise Exception("...") # should be typeerror def incorrect_multiple_operators_issubclass(arg1, arg2, arg3): if not issubclass(arg1) and issubclass(arg2) or issubclass(arg3): pass else: raise Exception("...") # should be typeerror def incorrect_multi_conditional(arg1, arg2): if isinstance(arg1, int): pass elif isinstance(arg2, int): raise Exception("...") # should be typeerror def multiple_is_instance_checks(some_arg): if isinstance(some_arg, str): pass elif isinstance(some_arg, int): pass else: raise Exception("...") # should be typeerror class MyCustomTypeValidation(Exception): pass def correct_custom_exception(some_arg): if isinstance(some_arg, int): pass else: raise MyCustomTypeValidation("...") # that's correct, because it's not vanilla def correct_complex_conditional(val): if val is not None and (not isinstance(val, int) or val < 0): raise ValueError(...) # fine if this is not a TypeError def correct_multi_conditional(some_arg): if some_arg == 3: pass elif isinstance(some_arg, int): pass else: raise Exception("...") # fine if this is not a TypeError def correct_should_ignore(some_arg): if isinstance(some_arg, int): pass else: raise TypeError("...") def check_body(some_args): if isinstance(some_args, int): raise ValueError("...") # should be typeerror def check_body_correct(some_args): if isinstance(some_args, int): raise TypeError("...") # correct def multiple_elifs(some_args): if not isinstance(some_args, int): raise ValueError("...") # should be typerror elif some_args < 3: raise ValueError("...") # this is ok elif some_args > 10: raise ValueError("...") # this is ok if we don't simplify else: pass def multiple_ifs(some_args): if not isinstance(some_args, int): raise ValueError("...") # should be typerror else: if some_args < 3: raise ValueError("...") # this is ok else: if some_args > 10: raise ValueError("...") # this is ok if we don't simplify else: pass def else_body(obj): if isinstance(obj, datetime.timedelta): return "TimeDelta" elif isinstance(obj, relativedelta.relativedelta): return "RelativeDelta" elif isinstance(obj, CronExpression): return "CronExpression" else: raise Exception(f"Unknown object type: {obj.__class__.__name__}") def early_return(): if isinstance(this, some_type): if x in this: return raise ValueError(f"{this} has a problem") # this is ok def early_break(): for x in this: if isinstance(this, some_type): if x in this: break raise ValueError(f"{this} has a problem") # this is ok def early_continue(): for x in this: if isinstance(this, some_type): if x in this: continue raise ValueError(f"{this} has a problem") # this is ok def early_return_else(): if isinstance(this, some_type): pass else: if x in this: return raise ValueError(f"{this} has a problem") # this is ok