Python Forum
Can the comments produce errors in python?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Can the comments produce errors in python?
#1
Hi!

I'm attaching the outputs of my little programs at the end of the code, as comments, to see quicker what the program does, and also to include ideas, variations, possible errors, etc. to improve my knowledge, and I have just found something that I find strange.

This program runs fine:

import re

string1 = 'Agent Cheesecake was a double agent.'
agentNamesRegex = re.compile(r'Agent (\w)\w*')
mo0 = agentNamesRegex.sub(r'\0**', string1)
print(f"This is string1 '{string1}' with r'\0**' after censorship: {mo0}\n")
and produces the following output:
Output:
This is string1 'Agent Cheesecake was a double agent.' with r' **' after censorship: ** was a double agent. >>>
But if I attach the output as comments at the end of the code, and I run the new program with the comments again:

import re

string1 = 'Agent Cheesecake was a double agent.'
agentNamesRegex = re.compile(r'Agent (\w)\w*')
mo0 = agentNamesRegex.sub(r'\0**', string1)
print(f"This is string1 '{string1}' with r'\0**' after censorship: {mo0}\n")

##Output:
##
##This is string1 'Agent Cheesecake was a double agent.' with r' **' after censorship:  ** was a double agent.
##
##>>>
it produces the following
Error:
Syntax error: source code string cannot contain null bytes.
I thought that the comments couldn't produce errors, as I thought once the signs ## were found, python took everything else as comments, and did nothing about what there was inside those comments. Am I wrong? How can the comments produce an error?

All the best,
newbieAuggie2019

"That's been one of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains."
Steve Jobs
Reply
#2
I am not able to reproduce this error. The last snippets works just fine
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
(Nov-20-2019, 03:04 PM)buran Wrote: I am not able to reproduce this error. The last snippets works just fine

Hi!

I think you just copied and pasted the last piece of code, and run it. I have just made that and it works just fine, as you said. The problem arises when you run the first program and then attach the output to that program as comments. Then it seems that the space in r' **' in the comments produces the error.

I have just tested in Cmder and with Cmder it works fine. Not with IDLE, and when I tried to copy and paste the output to the program in PyScripter, it only copies the comments like this:
##Output:
##
##This is string1 'Agent Cheesecake was a double agent.' with r'
stopping at the apostrophe, just before the space, that python takes as a null byte.

Thank you and all the best,
newbieAuggie2019

"That's been one of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains."
Steve Jobs
Reply
#4
It looks like something with IDLE
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#5
(Nov-20-2019, 03:51 PM)buran Wrote: It looks like something with IDLE

It seems that it is not only with IDLE, as with PyScripter, it stops the paste process at the point IDLE takes as a null byte. Maybe it's something related to r'\0**' being converted into r' **' instead of being printed as r'\0**' inside the string? If I run actually the program:

import re
 
string1 = 'Agent Cheesecake was a double agent.'
agentNamesRegex = re.compile(r'Agent (\w)\w*')
mo0 = agentNamesRegex.sub(r'\0**', string1)
print(f"This is string1 '{string1}' with r'\0**' after censorship: {mo0}\n")
with PyScript, the output is the following:
Output:
*** Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32. *** *** Remote Python engine is active *** >>> *** Remote Interpreter Reinitialized *** This is string1 'Agent Cheesecake was a double agent.' with r' >>>
so it doesn't even finish printing and executing the whole program.

On another level, I know that IDLE is not a very good terminal, but it's something like driving a Mercedes and not using its original brakes.

All the best,
newbieAuggie2019

"That's been one of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains."
Steve Jobs
Reply
#6
The problem is that you use \0 escape character that is a zero byte.
Inside f-string the r want work then nothing get printed after zero byte.
Can trick it together so it kind of work,but make it easier for yourself and don't use zero byte escape character as a replace.
import re

string1 = 'Agent Cheesecake was a double agent.'
agent_names_regex = re.compile(r'Agent (\w)\w*')
mo_0 = agent_names_regex.sub(r'\0**', string1)
print(fr"This is string1 '{string1}' with \0** after censorship: {mo_0!r}")
Output:
This is string1 'Agent Cheesecake was a double agent.' with \0** after censorship: '\x00** was a double agent.'
Reply
#7
(Nov-20-2019, 05:44 PM)snippsat Wrote: The problem is that you use \0 escape character that is a zero byte.
Inside f-string the r want work then nothing get printed after zero byte.
Thank you! I had a feeling that it was something like that (although I don't know exactly what a null or zero byte is, I guess it's an empty byte, though not sure what that means either).

Once again, I find curious the different outputs while using different terminals:

1) If I try to attach the output of the original program, as comments to it, in PyScript, the program prevents me doing it, and accepts only this paste:
##Output:
##
##This is string1 'Agent Cheesecake was a double agent.' with r'
I have to type manually r' **' and then, if I try to paste the rest of the output (I'm very lazy at typing Tongue ), the program prevents me again doing it, and accepts only:
after censorship:
I have once again to type manually the rest: ** was a double agent.
If I run the program in PyScript (with or without the comments), this is the strange output (I say strange, because it's part of making exercises with regex and substitution, the program working fine (without the comments) even in IDLE):
Output:
*** Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32. *** *** Remote Python engine is active *** >>> *** Remote Interpreter Reinitialized *** This is string1 'Agent Cheesecake was a double agent.' with r' >>>
2) With Cmder, the program (with or without comments) works fine.
3) With IDLE the program (without the comments) works fine, but when I add the output as comments to it, and then try to run it again, the program throws back the message:
Error:
Syntax error: source code string cannot contain null bytes.
and that's my main question: Why is that the output added to the program as comments throws back an error message if supposedly python overlooks everything that it's inside the comments preceded by ##?

All the best,
newbieAuggie2019

"That's been one of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains."
Steve Jobs
Reply
#8
It should work fine everywhere if remove that \0 and have normal characters as replace.
The error happens before comments part.
Tested VS Code,PyScripter,cmder,IDLE okay.
import re

string1 = 'Agent Cheesecake was a double agent.'
agent_names_regex = re.compile(r'Agent (\w)\w*')
mo_0 = agent_names_regex.sub(r'***', string1)
print(f"This is string1 '{string1}' with *** after censorship: {mo_0}")

##Output:
##
# This is string1 'Agent Cheesecake was a double agent.' with *** after censorship: *** was a double agent.
##
##>>>
Reply
#9
(Nov-21-2019, 10:35 AM)snippsat Wrote: The error happens before comments part.
Thank you!

According to my multiple tries in IDLE, before adding the comments, it doesn't seem so. This program runs fine in IDLE:

import re
 
string1 = 'Agent Cheesecake was a double agent.'
agentNamesRegex = re.compile(r'Agent (\w)\w*')
mo0 = agentNamesRegex.sub(r'\0**', string1)
print(f"This is string1 '{string1}' with r'\0**' after censorship: {mo0}\n")
and produces the following output in IDLE:
Output:
This is string1 'Agent Cheesecake was a double agent.' with r' **' after censorship: ** was a double agent. >>>
It is ONLY when I add that output as comments to the program in IDLE, and then I try to run the program with the comments, when the error message of null bytes is thrown back at me. Probably I'm not very good at explaining myself. I don't need/want to modify the program as it runs fine till I add the output as comments. THE ONLY THING THAT I WOULD LIKE TO KNOW IS WHY THE COMMENTS THROW BACK AN ERROR MESSAGE WHILE SUPPOSEDLY PYTHON DOESN'T READ INSIDE THE COMMENTS PRECEDED BY ##.

Just to clarify a bit further, the original program to see differences in substitutions is:
import re

string1 = 'Agent Cheesecake was a double agent.'
agentNamesRegex = re.compile(r'Agent (\w)\w*')
mo0 = agentNamesRegex.sub(r'\0**', string1)
mo1 = agentNamesRegex.sub(r'\1**', string1)
print(f"This is string1 '{string1}' with r'\0**' after censorship: {mo0}\n")
print(f"This is string1 '{string1}' with r'\1**' after censorship: {mo1}\n")
which also runs fine in IDLE, producing the following output:
Output:
This is string1 'Agent Cheesecake was a double agent.' with r' **' after censorship: ** was a double agent. This is string1 'Agent Cheesecake was a double agent.' with r' **' after censorship: C** was a double agent. >>>
And it also runs fine till I add the output as comments to the program in IDLE (but before that, it runs fine). I only simplify the program to make the question of why those comments are read in IDLE and throw back an error message. I hope to have explained myself better now, sorry for not transmitting my doubt clearer before.

All the best,
newbieAuggie2019

"That's been one of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains."
Steve Jobs
Reply
#10
The error seems clear - you can't have null bytes in a Python source file. There's surely some rationale, but whether the source is your keyboard, the output of a script, or anything else, you can't include null bytes in Python scripts.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Algorithm for extracting comments from Python source code Pavel1982 6 412 Feb-28-2024, 09:52 PM
Last Post: Pavel1982
  Produce One file Per PurchaseOrder jland47 1 292 Jan-26-2024, 11:38 AM
Last Post: Larz60+
  When does Python detect Errors? stamp1t 1 400 Oct-21-2023, 05:53 PM
Last Post: deanhystad
  How do I add comments from a text-file to an array of folders? clausneergaard 2 1,734 Feb-08-2023, 07:45 PM
Last Post: Larz60+
  Inserting line feeds and comments into a beautifulsoup string arbiel 1 1,144 Jul-20-2022, 09:05 AM
Last Post: arbiel
  Using multiprocessing to produce objects for i in range lucasrohr 6 1,581 Feb-02-2022, 03:53 PM
Last Post: lucasrohr
  Delete multiple comments with a single API call (facebook) Ascalon 0 2,265 Dec-04-2021, 08:33 PM
Last Post: Ascalon
  Rmarkdown opened by python code - errors Rav013 0 2,049 Apr-27-2021, 03:13 PM
Last Post: Rav013
  How to make a bot in pycharm for youtube for automatically adding python comments kodek2222 1 2,026 Jan-21-2021, 12:47 PM
Last Post: Aspire2Inspire
  Python Request Errors PythonNoob1998 7 3,765 Jan-07-2021, 05:18 PM
Last Post: buran

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020