Skip to content

AttributeError: 'TupleType' object has no attribute 'type' #979

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
ZeeD opened this issue Nov 18, 2015 · 6 comments
Closed

AttributeError: 'TupleType' object has no attribute 'type' #979

ZeeD opened this issue Nov 18, 2015 · 6 comments
Labels
bug mypy got something wrong

Comments

@ZeeD
Copy link

ZeeD commented Nov 18, 2015

I'm using the latest git version.
I'm toying with mypy and a .py of my project. I get this stacktrace:

$ mypy --verbose  _pdftojson.py 
Traceback (most recent call last):
File "/usr/bin/mypy", line 6, in <module>
    main(__file__)
File "/usr/lib64/python3.5/site-packages/mypy/main.py", line 49, in main
    type_check_only(sources, bin_dir, options)
File "/usr/lib64/python3.5/site-packages/mypy/main.py", line 92, in type_check_only
    python_path=options.python_path)
File "/usr/lib64/python3.5/site-packages/mypy/build.py", line 196, in build
    result = manager.process(initial_states)
File "/usr/lib64/python3.5/site-packages/mypy/build.py", line 378, in process
    next.process()
File "/usr/lib64/python3.5/site-packages/mypy/build.py", line 832, in process
    self.type_checker().visit_file(self.tree, self.tree.path)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 371, in visit_file
    self.accept(d)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 378, in accept
    typ = node.accept(self)
File "/usr/lib64/python3.5/site-packages/mypy/nodes.py", line 370, in accept
    return visitor.visit_func_def(self)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 431, in visit_func_def
    self.check_func_item(defn, name=defn.name())
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 464, in check_func_item
    self.check_func_def(defn, typ, name)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 545, in check_func_def
    self.accept_in_frame(item.body)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 391, in accept_in_frame
    answer = self.accept(node, type_context)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 378, in accept
    typ = node.accept(self)
File "/usr/lib64/python3.5/site-packages/mypy/nodes.py", line 514, in accept
    return visitor.visit_block(self)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 939, in visit_block
    self.accept(s)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 378, in accept
    typ = node.accept(self)
File "/usr/lib64/python3.5/site-packages/mypy/nodes.py", line 602, in accept
    return visitor.visit_for_stmt(self)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 1630, in visit_for_stmt
    item_type = self.analyze_iterable_item_type(s.expr)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 1642, in analyze_iterable_item_type
    iterable = self.accept(expr)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 378, in accept
    typ = node.accept(self)
File "/usr/lib64/python3.5/site-packages/mypy/nodes.py", line 974, in accept
    return visitor.visit_call_expr(self)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 1741, in visit_call_expr
    return self.expr_checker.visit_call_expr(e)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 118, in visit_call_expr
    return self.check_call_expr_with_callee_type(callee_type, e)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 128, in check_call_expr_with_callee_type
    e.arg_names, callable_node=e.callee)[0]
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 189, in check_call
    arg_types = self.infer_arg_types_in_context(None, args)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 236, in infer_arg_types_in_context
    arg_type = self.accept(arg, ctx)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 1320, in accept
    return self.chk.accept(node, context)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 378, in accept
    typ = node.accept(self)
File "/usr/lib64/python3.5/site-packages/mypy/nodes.py", line 930, in accept
    return visitor.visit_member_expr(self)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 1767, in visit_member_expr
    return self.expr_checker.visit_member_expr(e)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 680, in visit_member_expr
    result = self.analyze_ordinary_member_access(e, False)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 693, in analyze_ordinary_member_access
    self.named_type, self.msg)
File "/usr/lib64/python3.5/site-packages/mypy/checkmember.py", line 84, in analyze_member_access
    result = analyze_class_attribute_access(itype, name, node, is_lvalue, builtin_type, msg)
File "/usr/lib64/python3.5/site-packages/mypy/checkmember.py", line 212, in analyze_class_attribute_access
    node = itype.type.get(name)
AttributeError: 'TupleType' object has no attribute 'type'
@refi64
Copy link
Contributor

refi64 commented Nov 18, 2015

What file triggered this, i.e. what's your Python code?

@JukkaL JukkaL added the bug mypy got something wrong label Nov 19, 2015
@JukkaL
Copy link
Collaborator

JukkaL commented Nov 19, 2015

Yeah, it would be useful if you could isolate a small Python fragment that generates the stack trace. It's not obvious from the stack trace what caused this. This happened in a for statement -- I wonder if this bit of information makes it easier to isolate the cause.

@ZeeD
Copy link
Author

ZeeD commented Nov 20, 2015

sorry for the delay. I did some tests to minimize the code. From what I can understand, the problem is with the namedtuple "_fields" attribute

import collections
MyNamedTuple = collections.namedtuple('MyNamedTuple', ['spam', 'eggs'])
MyNamedTuple._fields

mypy tells me

$ mypy stacktrace_mypy.py     
Traceback (most recent call last):
File "/usr/bin/mypy", line 6, in <module>
    main(__file__)
File "/usr/lib64/python3.5/site-packages/mypy/main.py", line 49, in main
    type_check_only(sources, bin_dir, options)
File "/usr/lib64/python3.5/site-packages/mypy/main.py", line 92, in type_check_only
    python_path=options.python_path)
File "/usr/lib64/python3.5/site-packages/mypy/build.py", line 196, in build
    result = manager.process(initial_states)
File "/usr/lib64/python3.5/site-packages/mypy/build.py", line 378, in process
    next.process()
File "/usr/lib64/python3.5/site-packages/mypy/build.py", line 832, in process
    self.type_checker().visit_file(self.tree, self.tree.path)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 371, in visit_file
    self.accept(d)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 378, in accept
    typ = node.accept(self)
File "/usr/lib64/python3.5/site-packages/mypy/nodes.py", line 528, in accept
    return visitor.visit_expression_stmt(self)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 1305, in visit_expression_stmt
    self.accept(s.expr)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 378, in accept
    typ = node.accept(self)
File "/usr/lib64/python3.5/site-packages/mypy/nodes.py", line 930, in accept
    return visitor.visit_member_expr(self)
File "/usr/lib64/python3.5/site-packages/mypy/checker.py", line 1767, in visit_member_expr
    return self.expr_checker.visit_member_expr(e)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 680, in visit_member_expr
    result = self.analyze_ordinary_member_access(e, False)
File "/usr/lib64/python3.5/site-packages/mypy/checkexpr.py", line 693, in analyze_ordinary_member_access
    self.named_type, self.msg)
File "/usr/lib64/python3.5/site-packages/mypy/checkmember.py", line 84, in analyze_member_access
    result = analyze_class_attribute_access(itype, name, node, is_lvalue, builtin_type, msg)
File "/usr/lib64/python3.5/site-packages/mypy/checkmember.py", line 212, in analyze_class_attribute_access
    node = itype.type.get(name)
AttributeError: 'TupleType' object has no attribute 'type'

@JukkaL
Copy link
Collaborator

JukkaL commented Nov 21, 2015

Thanks for the example! I'll look into this.

@JukkaL JukkaL closed this as completed in 7484ac2 Dec 14, 2015
@JukkaL
Copy link
Collaborator

JukkaL commented Dec 14, 2015

The crash is now fixed, but the _fields attribute is still not recognized. Added a new issue #1076 to track that.

@elazarg
Copy link
Contributor

elazarg commented Aug 16, 2016

See PR #1810

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong
Projects
None yet
Development

No branches or pull requests

4 participants