How to get warnings for wrong return types in PyCharm?












1














In a Python 3.7.1 project a method is defined with return type incompatible with the result type. However, the IDE, PyCharm 2018.2, gives no warnings. Here's a code example:





import numpy as np
from dataclasses import dataclass
import typing

# Definitions:
@dataclass(order=True)
class Theta:
vector: np.ndarray

def a(self) -> typing.AnyStr:
return self.vector.size

def b(self) -> str:
return self.vector.size

# Client code:
x = np.array([1, 2])
s = Theta(x).a().capitalize() # runtime errors
u = Theta(x).b().capitalize()


Is there a way to enforce type warnings, both in the definitions and the client code?



Note: There're several questions about Python type hints on SO, e.g., Pycharm strange warning when type hinting. However, they seem to focus on a different aspect.










share|improve this question



























    1














    In a Python 3.7.1 project a method is defined with return type incompatible with the result type. However, the IDE, PyCharm 2018.2, gives no warnings. Here's a code example:





    import numpy as np
    from dataclasses import dataclass
    import typing

    # Definitions:
    @dataclass(order=True)
    class Theta:
    vector: np.ndarray

    def a(self) -> typing.AnyStr:
    return self.vector.size

    def b(self) -> str:
    return self.vector.size

    # Client code:
    x = np.array([1, 2])
    s = Theta(x).a().capitalize() # runtime errors
    u = Theta(x).b().capitalize()


    Is there a way to enforce type warnings, both in the definitions and the client code?



    Note: There're several questions about Python type hints on SO, e.g., Pycharm strange warning when type hinting. However, they seem to focus on a different aspect.










    share|improve this question

























      1












      1








      1


      1





      In a Python 3.7.1 project a method is defined with return type incompatible with the result type. However, the IDE, PyCharm 2018.2, gives no warnings. Here's a code example:





      import numpy as np
      from dataclasses import dataclass
      import typing

      # Definitions:
      @dataclass(order=True)
      class Theta:
      vector: np.ndarray

      def a(self) -> typing.AnyStr:
      return self.vector.size

      def b(self) -> str:
      return self.vector.size

      # Client code:
      x = np.array([1, 2])
      s = Theta(x).a().capitalize() # runtime errors
      u = Theta(x).b().capitalize()


      Is there a way to enforce type warnings, both in the definitions and the client code?



      Note: There're several questions about Python type hints on SO, e.g., Pycharm strange warning when type hinting. However, they seem to focus on a different aspect.










      share|improve this question













      In a Python 3.7.1 project a method is defined with return type incompatible with the result type. However, the IDE, PyCharm 2018.2, gives no warnings. Here's a code example:





      import numpy as np
      from dataclasses import dataclass
      import typing

      # Definitions:
      @dataclass(order=True)
      class Theta:
      vector: np.ndarray

      def a(self) -> typing.AnyStr:
      return self.vector.size

      def b(self) -> str:
      return self.vector.size

      # Client code:
      x = np.array([1, 2])
      s = Theta(x).a().capitalize() # runtime errors
      u = Theta(x).b().capitalize()


      Is there a way to enforce type warnings, both in the definitions and the client code?



      Note: There're several questions about Python type hints on SO, e.g., Pycharm strange warning when type hinting. However, they seem to focus on a different aspect.







      python pycharm






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 12 at 17:41









      Tupolev._

      30829




      30829
























          1 Answer
          1






          active

          oldest

          votes


















          0














          typing.AnyStr is a type variable. It means that it will be inferred from passed parameter or containing class. In your case neither class, nor method does not use this type variable and as a result inferred a return type is Any.






          share|improve this answer





















          • What about the other method, with signature -> str? It's the same situation with type warnings.
            – Tupolev._
            Nov 19 at 16:42










          • @Tupolev._ Ctrl+click on size will open size definition where you could see that there is no mention about type of size. Type hints github.com/numpy/numpy-stubs are under development at the moment.
            – user2235698
            Nov 19 at 16:53











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53267401%2fhow-to-get-warnings-for-wrong-return-types-in-pycharm%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          typing.AnyStr is a type variable. It means that it will be inferred from passed parameter or containing class. In your case neither class, nor method does not use this type variable and as a result inferred a return type is Any.






          share|improve this answer





















          • What about the other method, with signature -> str? It's the same situation with type warnings.
            – Tupolev._
            Nov 19 at 16:42










          • @Tupolev._ Ctrl+click on size will open size definition where you could see that there is no mention about type of size. Type hints github.com/numpy/numpy-stubs are under development at the moment.
            – user2235698
            Nov 19 at 16:53
















          0














          typing.AnyStr is a type variable. It means that it will be inferred from passed parameter or containing class. In your case neither class, nor method does not use this type variable and as a result inferred a return type is Any.






          share|improve this answer





















          • What about the other method, with signature -> str? It's the same situation with type warnings.
            – Tupolev._
            Nov 19 at 16:42










          • @Tupolev._ Ctrl+click on size will open size definition where you could see that there is no mention about type of size. Type hints github.com/numpy/numpy-stubs are under development at the moment.
            – user2235698
            Nov 19 at 16:53














          0












          0








          0






          typing.AnyStr is a type variable. It means that it will be inferred from passed parameter or containing class. In your case neither class, nor method does not use this type variable and as a result inferred a return type is Any.






          share|improve this answer












          typing.AnyStr is a type variable. It means that it will be inferred from passed parameter or containing class. In your case neither class, nor method does not use this type variable and as a result inferred a return type is Any.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 19 at 15:59









          user2235698

          3,19011015




          3,19011015












          • What about the other method, with signature -> str? It's the same situation with type warnings.
            – Tupolev._
            Nov 19 at 16:42










          • @Tupolev._ Ctrl+click on size will open size definition where you could see that there is no mention about type of size. Type hints github.com/numpy/numpy-stubs are under development at the moment.
            – user2235698
            Nov 19 at 16:53


















          • What about the other method, with signature -> str? It's the same situation with type warnings.
            – Tupolev._
            Nov 19 at 16:42










          • @Tupolev._ Ctrl+click on size will open size definition where you could see that there is no mention about type of size. Type hints github.com/numpy/numpy-stubs are under development at the moment.
            – user2235698
            Nov 19 at 16:53
















          What about the other method, with signature -> str? It's the same situation with type warnings.
          – Tupolev._
          Nov 19 at 16:42




          What about the other method, with signature -> str? It's the same situation with type warnings.
          – Tupolev._
          Nov 19 at 16:42












          @Tupolev._ Ctrl+click on size will open size definition where you could see that there is no mention about type of size. Type hints github.com/numpy/numpy-stubs are under development at the moment.
          – user2235698
          Nov 19 at 16:53




          @Tupolev._ Ctrl+click on size will open size definition where you could see that there is no mention about type of size. Type hints github.com/numpy/numpy-stubs are under development at the moment.
          – user2235698
          Nov 19 at 16:53


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53267401%2fhow-to-get-warnings-for-wrong-return-types-in-pycharm%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Xamarin.iOS Cant Deploy on Iphone

          Glorious Revolution

          Dulmage-Mendelsohn matrix decomposition in Python