Skip to content
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

LGTM.com errors #2851

Merged
merged 3 commits into from Oct 10, 2021
Merged

LGTM.com errors #2851

merged 3 commits into from Oct 10, 2021

Conversation

DimitriPapadopoulos
Copy link
Contributor

Fix part of these LGTM.com errors:
https://lgtm.com/projects/g/nltk/nltk/?severity=error

Default value flows to here and is mutated.
Call to ReadError.__init__ with too few arguments; should be no fewer than 2.
@@ -242,7 +242,7 @@ def read_str(s, start_position):
try:
return eval(s[start_position : match.end()]), match.end()
except ValueError as e:
raise ReadError("invalid string (%s)" % e) from e
raise ReadError("valid escape sequence", start_position) from e
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should it say "invalid" instead?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ReadError documentation reads:

    :param expected: What was expected when an error occurred.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i see. i guess i am used to errors telling me what's wrong, rather than what is expected. but honestly, i don't even think this code works!! from my own poking around, eval-ing a string with an invalid escape sequence does NOT raise a ValueError, it instead raises a DeprecationWarning. This code dates back to 2008, so perhaps then python used raise an error?

There seems to be active discussion in the python community about this, and they may raise an error down the road.

all of this is to say, i know you're just trying to improve small bits of code quality and not anything more. So I added a quick unit test to check other errors work (they seem to), and this looks fine now!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the error message needs to make it easy for people to fix. Doesn't that mean reporting the invalid string?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps, but then that's because the ReadError class is poorly designed. This could be fixed in a different PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReadError class is defined further up in the file as:

class ReadError(ValueError):
    """
    Exception raised by read_* functions when they fail.
    :param position: The index in the input string where an error occurred.
    :param expected: What was expected when an error occurred.
    """

    def __init__(self, expected, position):
        ValueError.__init__(self, expected, position)
        self.expected = expected
        self.position = position

    def __str__(self):
        return f"Expected {self.expected} at {self.position}"

This PR fixed a bug where constructor was only passed one argument instead of two and the new string displayed to the user in the context of line 245 will be f"Expected valid escape sequence at {start_position}".

@dannysepler dannysepler self-assigned this Oct 9, 2021
@dannysepler dannysepler merged commit 9f468d3 into nltk:develop Oct 10, 2021
@dannysepler
Copy link
Contributor

Thanks, @DimitriPapadopoulos !

@DimitriPapadopoulos DimitriPapadopoulos deleted the lgtm_errors branch October 11, 2021 05:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants