Code printing twice - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Code printing twice (/thread-12705.html) |
Code printing twice - hypersdevelopment - Sep-08-2018 I'm making a Discord.py bot with a utilities package. In the utilities package, there are 3 files which are together causing the logic error. """ Database.py ----------- Database format: { "SectionNameHere" : { "foo" : "bar" }, "2ndSectionNameHere" : { "foo" : "bar" }, "3rdSectionNameHere" : { "foo" : "bar" } } """ import json class database: def __init__(self, *args, **kwargs): self.args = args self.kwargs = kwargs self.data = None def set(self): with open("Resources/database.json", "r") as DB: self.clean() self._data = DB.read() self.data = json.loads(str(self._data)) def clean(self): with open("Resources/database.json", "r") as fData: oData = fData.read() with open("Resources.json", "w") as wData: wData.write(oData.replace("'", "\"")) def init(self): self.clean() self.set()(database.json) { "userdata" : { "help" : "nope" } }(Giveaway.py) import random import Utilities.database as database class giveaway: def __init__(self, Name): self.reward = Name self.contestants = [] def contestantJoin(self, user): self.contestants.append(user) def chooseWinner(self): return random.choice(self.contestants) def delete(self): del self # If a giveaway is saved in memory, load it automaticly db = database.database() db.init() print(db.data["userdata"]["help"])Now this should print Nope once, but instead it prints Nope twice. I'm using python 3.6 Win7. Any help would be appreciated! Thanks in advance!
RE: Code printing twice - ichabod801 - Sep-08-2018 Works fine for me (2.7 and 3.6). I did put all the code in one file, and changed the file names, but I don't think that should have changed anything. How exactly are you calling the program? RE: Code printing twice - Larz60+ - Sep-08-2018 what is the name of the first program. Too many things named database, makes it confusing. this code in giveaway.py will always run. # If a giveaway is saved in memory, load it automaticly db = database.database() db.init() print(db.data["userdata"]["help"])if you only want this to run if the program is executed from command routine, change to: if __name__ == '__main__': # If a giveaway is saved in memory, load it automaticly db = database.database() db.init() print(db.data["userdata"]["help"])some other items, indentation should be 4. set is a bad name for a method as it as a python command. you should add an empty line between methods to make code more readable. RE: Code printing twice - hypersdevelopment - Sep-09-2018 Quote:if you only want this to run if the program is executed from command routine, change to:Suprisingly enough, the if '__name__' == '__main__': fixed it.Quote:Works fine for me (2.7 and 3.6). I did put all the code in one file, and changed the file names, but I don't think that should have changed anything. How exactly are you calling the program?I'm running it from importing a different file. (init.py) initmsg = ["``dsconfig\nInitializing Utilities (Spooper/Utilities/__init__.py)\n\n"] initmsg.append("Initializing Database.py (Spooper/Utilities/database.py)\n") import Utilities.database as database initmsg.append("Finished Initializing Database.py (Spooper/Utilities/database.py)\n\n") initmsg.append("Initializing Giveaway.py (Spooper/Utilities/giveaway.py)\n") import Utilities.giveaway as giveaway initmsg.append("Finished Initializing Giveaway.py (Spooper/Utilities/database.py)\n\n") initmsg.append("Finished Initializing Utilities (Spooper/Utilities/__init__.py)\n") initmsg.append("\n``") initmsg = ''.join(initmsg) |