Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Implicit instantiation of exceptions with raise #11089

Description

@christianbundy

Bug Report

Python seems to treat raise ValueError the same way as raise ValueError(), with implicit instantiation, but Mypy doesn't seem to have the same behavior.

See: https://docs.python.org/3/tutorial/errors.html#raising-exceptions

To Reproduce

  1. Define subclass of Exception where __init__ has mandatory arguments
  2. raise SomeException
class SomeException(Exception):
    thing: str
    
    def __init__(self, thing: str) -> None:
        self.thing = thing

    def __str__(self) -> str:
        return f"There's a {self.thing} in my boot"
        
# BUG: Mypy does not see this problem.
def a() -> None:
    raise SomeException
    
# Correct: Mypy identifies the problem.
def b() -> None:
    raise SomeException()
    
# Correct: Mypy identifies that there is no problem here.
def c() -> None:
    raise SomeException(thing="snake")

https://mypy-play.net/?mypy=latest&python=3.10&gist=158348310d55f703fc05bacde65af438

Expected Behavior

This should throw an error about missing mandatory arguments.

Actual Behavior

No error.

Your Environment

  • Mypy version used: 0.910
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.10
  • Operating system and version: N/A

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions