+ 1

[Solved] Getting a permission error during a practice

I am going through the Python Intermediate course, and I am currently doing the practice coding for "Filling Up With Numbers", but no matter what code I use, I always get this error: "Traceback (most recent call last): File "/usercode/file0.py", line 3, in <module> file = open("numbers.txt", "w+") PermissionError: [Errno 13] Permission denied: 'numbers.txt'" Is this a bug, or is there a way to fix this?

14th Feb 2024, 11:20 PM
Benjamin Rogers
Benjamin Rogers - avatar
26 Respuestas
+ 2
Benjamin Rogers , By the way, Sololearn teaches a horrible practice of creating new files with 'w' mode, risking destroying the contents of any existing file accidentally having the same name. There's already a perfectly good mode whose purpose is specifically for safely creating new files: 'x' You can't hurt the virtual environment here, but it's good to build a habit of using 'x' anyway, so when you manage files at home, or worse, on the job, you don't blow it.
15th Feb 2024, 1:17 AM
Rain
Rain - avatar
+ 2
Wong Hei Ming Rain Bob_Li Solo I found out why that error is popping up, and I've sent sololearn an email with screenshots of my discovery. Hopefully, they will fix it soon.
15th Feb 2024, 10:53 AM
Benjamin Rogers
Benjamin Rogers - avatar
+ 2
So, I ran this code both in playground and in that exercise: from pathlib import Path curr = Path.cwd() for item in curr.iterdir(): print(f" ' {item} ' ") And you can see that in playground you are running code from the /usercode directory, but in that exercise, you are running from the root "/" directory.
15th Feb 2024, 11:12 AM
Benjamin Rogers
Benjamin Rogers - avatar
+ 2
Solo That works if you already completed it, but it didn't work for me as I hadn't completed it before. I just ran through it again with my original code, and I can confirm that the issue has been resolved.
15th Feb 2024, 2:11 PM
Benjamin Rogers
Benjamin Rogers - avatar
+ 1
Yes, I also get an error in the test, there is no access to the file, although the code works well in the sandbox.
15th Feb 2024, 12:41 AM
Solo
Solo - avatar
+ 1
It is strange, it seems something in the backend is changed. The old code doesn't pass the pass anymore. However, if I change the code a bit it works. # change the switch to 'r' to open the file file = open("/usercode/files/numbers.txt", "w+")
15th Feb 2024, 1:54 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
can confirm. someone changed something and the file cannot be accessed in the practice. maybe they accidentally changed it to pro only internally?
15th Feb 2024, 2:14 AM
Bob_Li
Bob_Li - avatar
+ 1
Bob_Li Changing the following codes: file = open("numbers.txt", "w+") f = open("numbers.txt", "r") into this: file = open("/usercode/files/numbers.txt", "w+") f = open("/usercode/files/numbers.txt", "r") It gets pass the permission problem. Tested on PC and the apps. But there is definitely something wrong with the backend. The code is not syntax highlight as used to be when you open with PC. All text is white just like pain text, but the codes run. Benjamin Rogers I think you should report this bug to SL along with the findings. At one occasion they fixed a bug with a hard evidence in my experience.
15th Feb 2024, 4:31 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Bob_Li I think they changed the folder permission, since the code is making a new file on the fly...
15th Feb 2024, 4:34 AM
Wong Hei Ming
Wong Hei Ming - avatar
+ 1
Wong Hei Ming , Yes, and that's what 'w' should be restricted to. You should only use 'w' when you know the file already exists and the user has chosen to overwrite it. 'x' should be used to safely create a new file, because it automatically aborts if you've accidentally chosen a name that already exists.
15th Feb 2024, 5:53 AM
Rain
Rain - avatar
+ 1
Eden Wheeler The issue isn't with my system, it's with the practice codes in Sololearn's system when going through the learning modules. Edit: More specifically, the module I have listed. The other practice code segments seem to work fine.
15th Feb 2024, 12:53 PM
Benjamin Rogers
Benjamin Rogers - avatar
+ 1
Benjamin Rogers thank you for sharing your research, but it was already clear from Wong Hei Ming recommendation to change the file name to /usercode/files/numbers.txt the path of which is used in the Playground, which is actually what I did once again after completing this task, since I had already passed it before. By the way, I just tried to go through it with this address again and couldn't, I restored the previous name numbers.txt and everything worked without any problems. So everything has been restored and this problem is no longer relevant. Apparently, it really happened that the developers of Sololearn were working with this file at the moment...😎
15th Feb 2024, 2:03 PM
Solo
Solo - avatar
+ 1
Benjamin Rogers in this case, you can safely mark [Solved] in the title of the question...😎
15th Feb 2024, 2:22 PM
Solo
Solo - avatar
0
# Benjamin Rogers , # Do you need to specify a path? # Maybe you can troubleshoot # with a known permanent file # just to see if any file access # works. # I just confirmed this snippet # works in the playground # outside any course. It prints # Harry Potter # etc. with open("/usercode/files/books.txt") as f: print(f.read())
15th Feb 2024, 1:10 AM
Rain
Rain - avatar
0
Rain, Yeah, in the playground it works. In REPL, it works. In my IDE, it works... but for some reason, it won't work during that practice... and I can't move onto the next lesson without it. I've tried every variation of file handling, I even replaced file = open() with the `with` statement, same error.
15th Feb 2024, 1:28 AM
Benjamin Rogers
Benjamin Rogers - avatar
0
Rain, I don't know why you said SL taught us wrongly about opening file in multiple places. These are the text I copied from the lessons, it clearly says 'w' switch REWRITE the contents of a file. Opening Files ------------- You can specify the mode used to open a file by applying a second argument to the open function. Sending "r" means open in read mode, which is the default. Sending "w" means write mode, for rewriting the contents of a file. Sending "a" means append mode, for adding new content to the end of the file. Adding "b" to a mode opens it in binary mode, which is used for non-text files (such as image and sound files). Writing Files ------------- In case the file already exists, its entire content will be replaced when you open it in write mode using "w". If you want to add content to an existing file, you can open it using the "a" mode, which stand for "append"
15th Feb 2024, 1:56 AM
Wong Hei Ming
Wong Hei Ming - avatar
0
Wong Hei Ming , Yes. They said 'w' clears the file contents and yet still used it in all the examples of opening a new file. They didn't even mention 'x', which is exactly for that purpose. And neither did you.
15th Feb 2024, 3:34 AM
Rain
Rain - avatar
0
Rain 'w' has it usefulness. For example, you want to save a game and overwrite the existing save file. Another example is writing a document, where we press Ctrl S to save the file with the same file name.
15th Feb 2024, 3:41 AM
Wong Hei Ming
Wong Hei Ming - avatar
0
But the current problem is a permission-level access restriction. This feels like someone in the Sololearn IT crew changed something they shouldn't have in this part of the codebase.
15th Feb 2024, 4:20 AM
Bob_Li
Bob_Li - avatar
0
Wong Hei Ming so maybe they changed the code's file location to somewhere where it does not have access permission... yes, specifying the alternate file path where the user have access permission is a workaround.👍
15th Feb 2024, 4:33 AM
Bob_Li
Bob_Li - avatar