Blame tests/run/uninitialized.py

Packit 562c7a
# mode: run
Packit 562c7a
# tag: control-flow, uninitialized
Packit 562c7a
Packit 562c7a
def conditional(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> conditional(True)
Packit 562c7a
    []
Packit 562c7a
    >>> conditional(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    if cond:
Packit 562c7a
        a = []
Packit 562c7a
    return a
Packit 562c7a
Packit 562c7a
def inside_loop(iter):
Packit 562c7a
    """
Packit 562c7a
    >>> inside_loop([1,2,3])
Packit 562c7a
    3
Packit 562c7a
    >>> inside_loop([])
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'i' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    for i in iter:
Packit 562c7a
        pass
Packit 562c7a
    return i
Packit 562c7a
Packit 562c7a
def try_except(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> try_except(True)
Packit 562c7a
    []
Packit 562c7a
    >>> try_except(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    try:
Packit 562c7a
        if cond:
Packit 562c7a
            a = []
Packit 562c7a
        raise ValueError
Packit 562c7a
    except ValueError:
Packit 562c7a
        return a
Packit 562c7a
Packit 562c7a
def try_finally(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> try_finally(True)
Packit 562c7a
    []
Packit 562c7a
    >>> try_finally(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    try:
Packit 562c7a
        if cond:
Packit 562c7a
            a = []
Packit 562c7a
        raise ValueError
Packit 562c7a
    finally:
Packit 562c7a
        return a
Packit 562c7a
Packit 562c7a
def deleted(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> deleted(False)
Packit 562c7a
    {}
Packit 562c7a
    >>> deleted(True)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    a = {}
Packit 562c7a
    if cond:
Packit 562c7a
        del a
Packit 562c7a
    return a
Packit 562c7a
Packit 562c7a
def test_nested(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> test_nested(True)
Packit 562c7a
    >>> test_nested(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    if cond:
Packit 562c7a
        def a():
Packit 562c7a
            pass
Packit 562c7a
    return a()
Packit 562c7a
Packit 562c7a
def test_outer(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> test_outer(True)
Packit 562c7a
    {}
Packit 562c7a
    >>> test_outer(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    if cond:
Packit 562c7a
        a = {}
Packit 562c7a
    def inner():
Packit 562c7a
        return a
Packit 562c7a
    return a
Packit 562c7a
Packit 562c7a
def test_inner(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> test_inner(True)
Packit 562c7a
    {}
Packit 562c7a
    >>> test_inner(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    NameError: free variable 'a' referenced before assignment in enclosing scope
Packit 562c7a
    """
Packit 562c7a
    if cond:
Packit 562c7a
        a = {}
Packit 562c7a
    def inner():
Packit 562c7a
        return a
Packit 562c7a
    return inner()
Packit 562c7a
Packit 562c7a
def test_class(cond):
Packit 562c7a
    """
Packit 562c7a
    >>> test_class(True)
Packit 562c7a
    1
Packit 562c7a
    >>> test_class(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'A' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    if cond:
Packit 562c7a
        class A:
Packit 562c7a
            x = 1
Packit 562c7a
    return A.x
Packit 562c7a
Packit 562c7a
Packit 562c7a
def test_try_except_regression(c):
Packit 562c7a
    """
Packit 562c7a
    >>> test_try_except_regression(True)
Packit 562c7a
    (123,)
Packit 562c7a
    >>> test_try_except_regression(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    if c:
Packit 562c7a
        a = (123,)
Packit 562c7a
    try:
Packit 562c7a
        return a
Packit 562c7a
    except:
Packit 562c7a
        return a
Packit 562c7a
Packit 562c7a
Packit 562c7a
def test_try_finally_regression(c):
Packit 562c7a
    """
Packit 562c7a
    >>> test_try_finally_regression(True)
Packit 562c7a
    (123,)
Packit 562c7a
    >>> test_try_finally_regression(False)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'a' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    if c:
Packit 562c7a
        a = (123,)
Packit 562c7a
    try:
Packit 562c7a
        return a
Packit 562c7a
    finally:
Packit 562c7a
        return a
Packit 562c7a
Packit 562c7a
Packit 562c7a
def test_expression_calculation_order_bug(a):
Packit 562c7a
    """
Packit 562c7a
    >>> test_expression_calculation_order_bug(False)
Packit 562c7a
    []
Packit 562c7a
    >>> test_expression_calculation_order_bug(True)
Packit 562c7a
    Traceback (most recent call last):
Packit 562c7a
    ...
Packit 562c7a
    UnboundLocalError: local variable 'b' referenced before assignment
Packit 562c7a
    """
Packit 562c7a
    if not a:
Packit 562c7a
        b = []
Packit 562c7a
    return (a or b) and (b or a)