• bjornsno@lemm.ee
    link
    fedilink
    arrow-up
    21
    ·
    6 months ago

    Day 598 of asking for a way to tell which functions throw exceptions in Python so I can know when to wrap in try catch. Seems to me that every other language has this, but when I’ve asked for at least a linter that can tell me I’m calling a function that throws, the general answer has been “why would you want that?”

    How am I supposed to ask for forgiveness if it’s impossible to know that I’m doing something risky in the first place?

    • ScreaminOctopus@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      8
      ·
      6 months ago

      Yeah, for this reason I would pretty much never encourage exceptions in Python over some other form of error handling. It’s so frustrating when called code throws some random exceptions that are completely undocumented. This is one of the few things Java got (sort of) right

      • bjornsno@lemm.ee
        link
        fedilink
        arrow-up
        5
        ·
        6 months ago

        I believe raises is the de facto Python version of throws, but no tools seem to exist to actually handle it.

        • Eager Eagle@lemmy.world
          link
          fedilink
          English
          arrow-up
          2
          ·
          6 months ago

          that’s still a docstring, idk of linters that take docstrings into account at all. We need a semantic approach for this kind of annotation.

          • bjornsno@lemm.ee
            link
            fedilink
            arrow-up
            1
            ·
            6 months ago

            That’s way harder to ask for. A docstring solution is fine so long as the linters know to pick it up.

            • Eager Eagle@lemmy.world
              link
              fedilink
              English
              arrow-up
              1
              ·
              edit-2
              6 months ago

              I don’t think so. A half-measure using docstrings would likely take more processing power and require an ad-hoc implementation because comments are not broken down into ast components afaik. It would also be more costly in the long run if they decide to convert it into a proper syntax, as a result of docstrings not having a single standard way of being written.

              Python has introduced several syntactic changes for type annotations, this is not unreasonable.

    • sqw@lemmy.sdf.org
      link
      fedilink
      English
      arrow-up
      3
      ·
      6 months ago

      cant practically anything throw an exception given the right (sometimes extremely remotely possible) circumstances?

      • prof@infosec.pub
        link
        fedilink
        arrow-up
        5
        ·
        6 months ago

        Not really. Exceptions are a controlled way of indicating something went wrong in an application.

        The only point where you wouldn’t know about the possibility of one is when you don’t know enough about the language features you’re using or when you use a badly documented library or framework.

        • sqw@lemmy.sdf.org
          link
          fedilink
          English
          arrow-up
          2
          ·
          6 months ago

          dont many of the language primitives confer the possibility of thrown exceptions?

      • bjornsno@lemm.ee
        link
        fedilink
        arrow-up
        3
        ·
        6 months ago

        Respectfully, no. Rust is great for some things and Python is great for other things. Switching to rust is not a solution to missing exception linting in another language.

      • bjornsno@lemm.ee
        link
        fedilink
        arrow-up
        2
        ·
        6 months ago

        Well at least php has it, which is a JITed scripting language just like Python. Although saying php has it is wrong, it’s just a special doc tag that the linters pick up. Which is exactly what I want for Python. The only other scripting language I’m very comfortable with is typescript, which can also support @throws via jsdoc and eslint.

        So to answer your question, I don’t know if it’s common, but from my minimal sample pool it’s at least not unheard of.

        You may not know this (just guessing because you commented on the nature of scripting/interpreted languages) but static analysis of dynamic languages has come really far and is an indispensable part of any reasonably sized project written in them these days. That’s another reason why I’m so surprised and frustrated by the lack of this in Python.