[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/NeoTim/pytype/master/docs/errors.md [Back]  [Original]

# Error classes

pytype has the following classes of errors, which can be disabled with a
`pytype: disable=error-class` directive. For example, to suppress an
error for a missing attribute `foo`:

```
x = a.foo  # pytype: disable=attribute-error
```

or, to suppress all attribute errors for a block of code:

```
# pytype: disable=attribute-error
x = a.foo
y = a.bar
# pytype: enable=attribute-error
```

See [Silencing Errors][silencing-errors] for a more detailed example.


   * [Error classes](#error-classes)
      * [annotation-type-mismatch](#annotation-type-mismatch)
      * [attribute-error](#attribute-error)
      * [bad-concrete-type](#bad-concrete-type)
      * [bad-function-defaults](#bad-function-defaults)
      * [bad-return-type](#bad-return-type)
      * [bad-slots](#bad-slots)
      * [bad-unpacking](#bad-unpacking)
      * [base-class-error](#base-class-error)
      * [container-type-mismatch](#container-type-mismatch)
      * [duplicate-keyword-argument](#duplicate-keyword-argument)
      * [ignored-abstractmethod](#ignored-abstractmethod)
      * [ignored-metaclass](#ignored-metaclass)
      * [ignored-type-comment](#ignored-type-comment)
      * [import-error](#import-error)
      * [invalid-annotation](#invalid-annotation)
      * [invalid-directive](#invalid-directive)
      * [invalid-function-definition](#invalid-function-definition)
      * [invalid-function-type-comment](#invalid-function-type-comment)
      * [invalid-namedtuple-arg](#invalid-namedtuple-arg)
      * [invalid-super-call](#invalid-super-call)
      * [invalid-typevar](#invalid-typevar)
      * [key-error](#key-error)
      * [late-directive](#late-directive)
      * [missing-parameter](#missing-parameter)
      * [module-attr](#module-attr)
      * [mro-error](#mro-error)
      * [name-error](#name-error)
      * [not-callable](#not-callable)
      * [not-indexable](#not-indexable)
      * [not-instantiable](#not-instantiable)
      * [not-supported-yet](#not-supported-yet)
      * [not-writable](#not-writable)
      * [pyi-error](#pyi-error)
      * [python-compiler-error](#python-compiler-error)
      * [recursion-error](#recursion-error)
      * [redundant-function-type-comment](#redundant-function-type-comment)
      * [reveal-type](#reveal-type)
      * [unbound-type-param](#unbound-type-param)
      * [unsupported-operands](#unsupported-operands)
      * [wrong-arg-count](#wrong-arg-count)
      * [wrong-arg-types](#wrong-arg-types)
      * [wrong-keyword-args](#wrong-keyword-args)


## annotation-type-mismatch

A variable had a type annotation and an assignment with incompatible types.

Example:


```python
x: int = 'hello world'
```

NOTE: This is currently only checked for fields within a @dataclass definition.

## attribute-error

The attribute being accessed may not exist. Often, the reason is that the
attribute is declared in a method other than `__new__` or `__init__`:


```python
class A(object):
  def make_foo(self):
    self.foo = 42
  def consume_foo(self):
    return self.foo  # attribute-error
```

To make pytype aware of `foo`, declare its type with a variable annotation:


```python
class A(object):
  foo: int
```

NOTE: This declaration does *not* define the attribute at runtime.

The above variable annotation syntax is available only in Python 3.6+, so in
earlier versions, declare a class attribute (with the literal ellipses) and
supply the type in a type comment:


```python
class A(object):
  foo = ...  # type: int
```

NOTE: This pattern *does* define a runtime attribute.

## bad-concrete-type

A generic type was instantiated with incorrect concrete types.
Example:


```python
from typing import Generic, TypeVar

T = TypeVar('T', int, float)

class A(Generic[T]):
  pass

obj = A[str]()  # bad-concrete-type
```

## bad-function-defaults

An attempt was made to set the `__defaults__` attribute of a function with an
object that is not a constant tuple. Example:


```python
import collections
X = collections.namedtuple("X", "a")
X.__new__.__defaults__ = [None]  # bad-function-defaults
```

## bad-return-type

At least one of the possible types for the return value does not match the
declared return type. Example:


```python
def f(x) -> int:
  if x:
    return 42
  else:
    return None  # bad-return-type
```

NOTE: For the corner case of an empty function whose body is a docstring, use
the block form of `disable` to suppress the error:

```python
# pytype: disable=bad-return-type
def f() -> int:
  """Override in subclasses and return int."""
# pytype: enable=bad-return-type
```

## bad-slots

An attempt was made to set the `__slots__` attribute of a class using an object
that's not a string.


```python
class Foo(object):
  __slots__ = (1, 2, 3)
```

## bad-unpacking

A tuple was unpacked into the wrong number of variables. Example:


```python
a, b = (1, 2, 3)  # bad-unpacking
```

## base-class-error

The class definition uses an illegal value for a base class. Example:


```python
class A(42):  # base-class-error
  pass
```

## container-type-mismatch

A method call violated the type annotation of a container by modifying its
contained type.

Example:


```python
a: List[int] = [1, 2]
a.append("hello")  # 
```python
def f(x):
  pass
f(True, x=False)  # duplicate-keyword-argument
```

If you believe you are seeing this error due to a bug on pytype's end, see
[this section][pyi-stub-files] for where the type information we use is located.

## ignored-abstractmethod

The abc.abstractmethod decorator was used in a non-abstract class. Example:


```python
import abc
class A(object):  # ignored-abstractmethod
  @abc.abstractmethod
  def f(self):
    pass
```

Add the `abc.ABCMeta` metaclass to fix this issue:


```python
import abc
class A(metaclass=abc.ABCMeta):
  @abc.abstractmethod
  def f(self):
    pass
```

## ignored-metaclass

A Python 2-only metaclass declaration was found. Example:


```python
class A(object):
  __metaclass__ = Meta
```

For Python 3-only code, the fix is:


```python
class A(metaclass=Meta):
  ...
```

For Python 2-and-3 code, two equally good fixes are:


```python
import six
@six.add_metaclass(Meta)
class A(object):
  ...
```

or:


```python
import six
class A(six.with_metaclass(Meta, object)):
  ...
```

## ignored-type-comment

A type comment was found on a line on which type comments are not allowed.
Example:


```python
def f():
  return 42  # type: float  # ignored-type-comment
```

## import-error

The module being imported was not found.

## invalid-annotation

Something is wrong with this annotation. Examples:


```python
from typing import List, TypeVar, Union

T = TypeVar("T")
condition = ...  # type: bool
class _Foo: ...
def Foo():
  return _Foo()

def f(x: List[int, str]):  # bad: too many parameters for List
  pass
def f(x: T):  # bad: the TypeVar appears only once in the signature
  pass
def f(x: Foo):  # bad: not a type
  pass
def f(x: Union):  # bad: no options in the union
  pass
def f(x: int if condition else str):  # bad: ambiguous type
  pass
```

You will also see this error if you use a forward reference in typing.cast or
pass a bad type to `attr.ib`:


```python
import attr
import typing

v = typing.cast("A", None)  # invalid-annotation
class A(object):
  pass

@attr.s
class Foo(object):
  v = attr.ib(type=zip)  # invalid-annotation
```

The solutions are to use a type comment and to fix the type:


```python
import attr

v = None  # type: "A"
class A(object):
  pass

@attr.s
class Foo(object):
  v = attr.ib(type=list)
```

## invalid-directive

The error name is misspelled in a pytype disable/enable directive. Example with
a misspelled `name-error`:


```python
x = TypeDefinedAtRuntime  # pytype: disable=nmae-error  # invalid-directive
```

## invalid-function-definition

An invalid function was constructed via metaprogramming (typically with a
decorator such as `@dataclass`). Example:


```python
from dataclasses import dataclass

@dataclass
class A:
  x: int = 10
  y: str
```

which creates


```python
def __init__(x: int = 10, y: str):
  ...
```

with a non-default argument following a default one.

## invalid-function-type-comment

Something was wrong with this function type comment. Examples:


```python
def f(x):
  # type: (int)  # bad: missing return type
  pass
def f(x):
  # type: () - None  # bad: too few arguments
  pass
def f(x):
  # type: int -> None  # bad: missing parentheses
  pass
```

## invalid-namedtuple-arg

The typename or one of the field names in the namedtuple definition is invalid.
Field names:

*   must not be a Python keyword,
*   must consist of only alphanumeric characters and "_",
*   must not start with "_" or a digit.

Also, there can be no duplicate field names. The typename has the same
requirements, except that it can start with "_".


## invalid-super-call

A call to super without any arguments (Python 3) is being made from an invalid
context. A super call without any arguments should be made from a method or a
function defined within a class. Also, the caller should have at least one
positional argument.

## invalid-typevar

Something was wrong with this TypeVar definition. Examples:


```python
from typing import TypeVar
T = TypeVar("S")  # bad: storing TypeVar "S" as "T"
T = TypeVar(42)  # bad: using a non-str value for the TypeVar name
T = TypeVar("T", str)  # bad: supplying a single constraint (did you mean `bound=str`?)
T = TypeVar("T", 0, 100)  # bad: 0 and 100 are not types
```

## key-error

The dictionary key doesn't exist. Example:


```python
x = {}
y = x["y"]  # key-error
```

## late-directive

A `# pytype: disable` without a matching following enable or a `# type: ignore`
appeared on its own line after the first top-level definition. Such a directive
takes effect for the rest of the file, regardless of indentation, which is
probably not what you want:


```python
def f() -> bool:
  # pytype: disable=bad-return-type  # late-directive
  return 42
```

Two equally acceptable fixes:


```python
def f() -> bool:
  return 42  # pytype: disable=bad-return-type
```


```python
# pytype: disable=bad-return-type
def f() -> bool:
  return 42
# pytype: enable=bad-return-type
```

## missing-parameter

The function was called with a parameter missing. Example:


```python
def add(x, y):
  return x + y
add(42)  # missing-parameter
```

If you believe you are seeing this error due to a bug on pytype's end, see
[this section][pyi-stub-files] for where the type information we use is located.

## module-attr

The module attribute being accessed may not exist. Example:


```python
import sys
sys.nonexistent_attribute  # module-attr
```

## mro-error

A valid method resolution order cannot be created for the class being defined.
Often, the culprit is cyclic inheritance:


```python
class A(object):
  pass
class B(object, A):  # mro-error
  pass
```

## name-error

This name does not exist in the current namespace. Note that types like `List`,
`Dict`, etc., need to be imported from the typing module:


```python
MyListType = List[str]  # name-error
```


```python
from typing import List

MyListType = List[str]
```

## not-callable

The object being called or instantiated is not callable. Example:


```python
x = 42
y = x()  # not-callable
```

## not-indexable

The object being indexed is not indexable. Example:


```python
tuple[3]  # not-indexable
```

## not-instantiable

The class cannot be instantiated because it has abstract methods. Example:


```python
import abc
class A(metaclass=abc.ABCMeta):
  @abc.abstractmethod
  def f(self):
    pass
A()  # not-instantiable
```

## not-supported-yet

This feature is not yet supported by pytype.

## not-writable

The object an attribute was set on doesn't have that attribute, or that
attribute isn't writable:


```python
class Foo(object):
  __slots__ = ("x", "y")

Foo().z = 42  # not-writable
```

## pyi-error

The pyi file contains a syntax error.

If you encounter this error in a pyi file that you did not create yourself,
please [file a bug][new-bug].

## python-compiler-error

The Python code contains a syntax error.

## recursion-error

A recursive definition was found in a pyi file. Example:


```python
class A(B): ...
class B(A): ...
```

If you encounter this error in a pyi file that you did not create yourself,
please [file a bug][new-bug].

## redundant-function-type-comment

Using both inline annotations and a type comment to annotate the same function
is not allowed. Example:


```python
def f() -> None:
  # type: () -> None  # redundant-function-type-comment
  pass
```

## reveal-type

The error message displays the type of the expression passed to it. Example:


```python
import os
reveal_type(os.path.join("hello", u"world"))  # reveal-type: unicode
```

This feature is implemented as an error to ensure that `reveal_type()` calls are
removed after debugging.

## unbound-type-param

This error currently applies only to pyi files. The type parameter is not bound
to a class or function. Example:


```python
from typing import AnyStr
x = ...  # type: AnyStr  # unbound-type-param
```

Unbound type parameters are meaningless as types. If you want to take advantage
of types specified by a type parameter's constraints or bound, specify those
directly. So the above example should be rewritten as:


```python
from typing import Union
x = ...  # type: Union[str,  unicode]
```

## unsupported-operands

A binary operator was called with incompatible arguments. Example:


```python
x = "hello" ^ "world"  # unsupported-operands
```

## wrong-arg-count

The function was called with the wrong number of arguments. Example:


```python
def add(x, y):
  return x + y
add(1, 2, 3)  # wrong-arg-count
```

If you believe you are seeing this error due to a bug on pytype's end, see
[this section][pyi-stub-files] for where the type information we use is located.

## wrong-arg-types

The function was called with the wrong argument types. Example:


```python
def f(x: int):
  pass
f(42.0)  # wrong-arg-types
```

If you believe you are seeing this error due to a bug on pytype's end, see
[this section][pyi-stub-files] for where the type information we use is located.

## wrong-keyword-args

The function was called with the wrong keyword arguments. Example:


```python
def f(x=True):
  pass
f(y=False)  # wrong-keyword-args
```

If you believe you are seeing this error due to a bug on pytype's end, see
[this section][pyi-stub-files] for where the type information we use is located.


[pyi-stub-files]: user_guide.md#pytypes-pyi-stub-files
[silencing-errors]: user_guide.md#silencing-errors


[new-bug]: https://github.com/google/pytype/issues/new

Web Proxy Viewer  |  New URL  |  Original Page