Because it is dynamically typed, Python does not enforce a return type on a function. This means that different paths through a function can return different types of values, which can be very confusing to the user and significantly harder to maintain.


In particular, it is consequently also possible to mix empty ``++return++`` statements (implicitly returning ``++None++``) with some returning an expression. This rule verifies that all the ``++return++`` statements from a function are consistent.

== Noncompliant Code Example

[source,python]
----
def foo(a): # Noncompliant, function will return "true" or None
  if a == 1:
    return True
  return
----

== Compliant Solution

[source,python]
----
def foo(a):
  if a == 1:
    return True
  return False
----

or 


[source,python]
----
def foo(a):
  if a == 1:
    return True
  return None
----

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

include::../highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
