Разбиение программы на несколько файлов для улучшения читабельности - PullRequest
0 голосов
/ 11 ноября 2018

Я недавно закончил проект и теперь хочу разделить программу на несколько файлов, чтобы улучшить читаемость и будущие улучшения, но я не знаю, как это сделать. Я разделил все функции, связанные с определенной темой, на их собственные файлы (файлы базы данных в файле базы данных, файлы хеширования в хеширование и т. Д. И т. Д.)

edit: я считаю, что правильный термин - «модули» («файлы», на которые я пытаюсь разбить свою программу, извините за отсутствие правильной терминологии)

Для этого я сделал «из импорта foo *», что, как я знаю, является плохой практикой, но в моем редакторе pycharm он не показывает никаких немедленных ошибок в отличие от выполнения «import foo».

Однако, когда я запускаю программу, я получаю сообщение об ошибке, в котором говорится, что импортированный мной файл использует неопределенную переменную (которая определена в основной программе) Вот фрагмент кода:

from Data_Funcs import *
if __name__ == "__main__":
    DBSetup()
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((host, port))
    s.listen(1)
    while True:
        conn, addr = s.accept()
        connThread = Thread(target=handler, args=(conn, addr))
        connThread.daemon = True
        connThread.start()

Вот Data_Funcs:

def receiveData(FROM=""):
    print("In receive data")
    if FROM:
        print("From:", FROM)
    # sendPickledData(dataReady)
    dataString = conn.recv(4096)
    try:
        dataString = pickle.loads(dataString)
    except pickle.UnpicklingError as err:
        print("Pickling error:")
        print(err)
    time.sleep(0.2)
    print("Data received:")
    print(dataString)
    return dataString


def sendPickledData(data):
    print("In sendPickled,\nSending:",data)
    data = pickle.dumps(data)
    conn.sendall(data)
    time.sleep(0.2)

Однако, когда я запускаю программу, я получаю сообщение об ошибке:

  File "C:\Users\Green\AppData\Local\Programs\Python\Python36\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "C:\Users\Green\AppData\Local\Programs\Python\Python36\lib\threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "C:/Users/Green/Desktop/Py Proj/Project_Server_Handler_v5.py", line 200, in handler
    data = receiveData("handler")
  File "C:\Users\Green\Desktop\Py Proj\Data_Funcs.py", line 7, in receiveData
    dataString = conn.recv(4096)
NameError: name 'conn' is not defined

Несмотря на то, что переменная conn определена в части "if name == ' main ':" основной программы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...