0

Please reference the attached screenshot.

I am working on a scrapy pipeline. I am using Sublime Text 3 with Anaconda/AutoPep8. I just moved over from ST2 where I did not have AutoPep8 or Anaconda.

The huge white dot is telling me that this line has invalid syntax. I could not figure out what the problem was, so I copied the line and pasted it here on line 1 of what was then an empty file. The syntax error still showed, suggesting it was not a problem with a prior line missing a closing parenthesis.

Then I made up some similar code, lines 3, 6, & 9. As you can see, they all pass muster. (I don't care about the other little errors, they are not the issue).

Then I pasted in the entire method over onto this new document, and now, as you can see, even the suspect line (22) passes.

Then I copied and pasted the whole class, and again, as you can see, line 49, the code it was complaining about before now doesn't cause any issues at all.

I tried using the command palette - PEP8: Preview Changes, (see https://github.com/wistful/SublimeAutoPEP8) but nothing happened.

I also tried the right click menu Anaconda > Autoformat PEP8 Errors but the E501 errors (line too long) were ignored and nothing happened with the supposed syntax error in the if statement.

Note: When I first started using AutoPep8 to fix E501 errors last week, I noticed that about halfway through a script, it suddenly stopped reporting errors at all. Don't know if this is related.

I also get this error when ST3 starts: https://github.com/DamnWidget/anaconda/issues/514. However, the consensus seems to be that if Sublime works even after you click through this error, it is nothing to worry about. I just mention this to give you as much as I know so you can help.

I also tried turning len('advocate') into a string, but the syntax error remains.

What is going on here? Is there a bug in Anaconda, AutoPep8, ST3, or my code?

Ubuntu 16.04, Python 3.4, (but 'automatic' build in ST3) ST3 Build 3126 (I don't know how the Build number lines up with a version number) Anaconda, AutoPep8 version numbers unknown, but I got them less than two weeks ago.enter image description here

Malik A. Rumi
  • 1,855
  • 4
  • 25
  • 36
  • Your `if` statement isn't doing anything. If it needs to be there without doing anything, use `pass`. The error is that it is expecting an indented block. – 13smith_oliver Aug 11 '17 at 19:50
  • @13smith_oliver: Maybe I wasn't clear. 1. There was no indented block error. I've seen those. This was an invalid syntax error. 2. You have exactly the same code on lines 49 and 22, where they are not flagged for any errors. This is inconsistent. Either it's an error or it isn't. If it is, why? If it isn't, is this a bug? 3. I could be wrong, but I think my if statement is doing something. It is saying, "if it is true that advocate has a length of exactly three, then go ahead and make these assignment in the dictionary. If not, don't." – Malik A. Rumi Aug 14 '17 at 19:06

1 Answers1

1

Well, it took a lot of very patient Googling and a comparison test in VSCode, but I have the astoundingly simple answer: I should have put '==', not '=' ! Yes, dear friends, it is basic Python. = means assignment, == mean equality or comparison. My if is of the latter type, because you can't make an assignment in an if statement. Now VSCode didn't make this any clearer, I think they both use Pylint, but it at least let me know that this was probably a valid error, whether I understood it or not. (Unless of course I know more that the devs at Pylint...Yea, not likely).

Kudos to Jean Mark Gawron, (who must be related to the Klingon Emperor) for giving me the answer: http://gawron.sdsu.edu/python_for_ss/course_core/book_draft/programming_intro/boolean_results.html

Malik A. Rumi
  • 1,855
  • 4
  • 25
  • 36