pydocstyle icon indicating copy to clipboard operation
pydocstyle copied to clipboard

Crash: TypeError: a bytes-like object is required, not 'str'

Open tushar-deepsource opened this issue 4 years ago • 7 comments

Code snippet:

def f():
    b"""abc"""

Output:

$ pydocstyle mytest.py 
Traceback (most recent call last):
  File "/Users/tusharsadhwani/code/marvin-python/venv3/bin/pydocstyle", line 8, in <module>
    sys.exit(main())
  File "/Users/tusharsadhwani/code/marvin-python/venv3/lib/python3.10/site-packages/pydocstyle/cli.py", line 68, in main
    sys.exit(run_pydocstyle())
  File "/Users/tusharsadhwani/code/marvin-python/venv3/lib/python3.10/site-packages/pydocstyle/cli.py", line 44, in run_pydocstyle
    errors.extend(check((filename,), select=checked_codes,
  File "/Users/tusharsadhwani/code/marvin-python/venv3/lib/python3.10/site-packages/pydocstyle/checker.py", line 993, in check
    for error in ConventionChecker().check_source(source, filename,
  File "/Users/tusharsadhwani/code/marvin-python/venv3/lib/python3.10/site-packages/pydocstyle/checker.py", line 143, in check_source
    error = this_check(self, definition,
  File "/Users/tusharsadhwani/code/marvin-python/venv3/lib/python3.10/site-packages/pydocstyle/checker.py", line 204, in check_one_liners
    lines = safe_literal_eval(docstring).split('\n')
TypeError: a bytes-like object is required, not 'str'

tushar-deepsource avatar Jan 10 '22 07:01 tushar-deepsource

What use case necessitates creating a docstring that is bytes?

I can see a reason for creating a docstring that is a r"raw string" but not a reason for creating a docstring that is a b"bytes".

cclauss avatar Jan 03 '23 09:01 cclauss

@cclauss there's no specific reason per se, but if I were to do that, I'd hope that pydocstyle won't crash while running on my code.

tusharsadhwani avatar Jan 03 '23 09:01 tusharsadhwani

My sense is that it is a good thing that bad input results in an exception being raised.

  • https://peps.python.org/pep-0257/#what-is-a-docstring

cclauss avatar Jan 03 '23 09:01 cclauss

+1 I agree with @cclauss. If it helps improve things, we might even want to catch that type error and add a helpful error message that points to the above link. Although I'm ambivalent on the latter.

sambhav avatar Jan 03 '23 09:01 sambhav

Having the program crash with a stack trace is bad for two reasons:

  • it stops pydocstyle completely, so other files don't get checked.
  • it gives mixed signals: "Is their code buggy? Is this intentional?" There's no real way to figure out. Better to catch it and display an actual user facing message.

tusharsadhwani avatar Jan 03 '23 09:01 tusharsadhwani

Their code is buggy. Python 2: bytes == str Python 3: bytes != str The PEP is clear that docstrings should be a string literal.

cclauss avatar Jan 03 '23 09:01 cclauss

What I meant here was: When pydocstyle crashes, the user doesn't know if it's a bug in their code, or is it a bug in pydocstyle's code.

Certainly, when I run a python program and it crashes I assume there's a bug in the program, and not the input I gave.

tushar-deepsource avatar Feb 10 '23 09:02 tushar-deepsource