Как добавить исключение в функцию Python? - PullRequest
1 голос
/ 25 октября 2019

Добрый день. Я написал приложение на python, которое собирает журналы вызовов от АТС Avaya и записывает их в базу данных mysql. Это работает хорошо, но иногда УАТС отправляет пустую строку по какой-то причине, и программа не работает. Я прикрепляю экран и код ниже. Я понимаю, что вам нужно обернуть функцию в исключение: попробуйте исключить, но я не понимаю, как это сделать. Подскажите пожалуйста, как это сделать. введите описание изображения здесь


def write_db(item, *agrs):
    connection = pymysql.connect(host='localhost',
                                 user='acdr',
                                 password='it8ejokd',
                                 db='avaya_cdr',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    DBTBL = "cdr102019"
    DBFLD = "Date_call, Time_call, `Sec_dur`, `clg_num_in_tag`, `dialed_num`, dep_called, dep_dialed"

    dep_num_call = find_dep(item[3].replace(' ', ''))
    name_dep_call = name_dep(dep_num_call)
    dep_num_dial = find_dep(item[4].replace(' ', ''))
    name_dep_dial = name_dep(dep_num_dial)

    item.append(name_dep_call)
    item.append(name_dep_dial)
    item[1] = item[1] + "00"

    try:
        with connection.cursor() as cursor:
            sql = "INSERT INTO "+DBTBL+" ("+DBFLD+") VALUES (%s,%s,%s,%s,%s,%s,%s)"
            cursor.execute(sql, (item))
        connection.commit()
    finally:
        connection.close()

# Задаем адрес сервера
SERVER_ADDRESS = ('', 5100)

# Настраиваем сокет
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(SERVER_ADDRESS)
server_socket.listen(5)
print('server is running, please, press ctrl+c to stop')

# Слушаем запросы и пишем в db
while True:
    connection, address = server_socket.accept()

    data = connection.recv(1024)
    if not(b'\x00\x00\x00' in data) and not(b'1370' in data):
        str = data.decode("utf-8")
        item=[str[0:6],str[7:11],str[12:17],str[18:33],str[34:57]]
        print(item)
        write_db(item)

    connection.close()

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Это должно сработать. Я использовал все четыре элемента try / кроме / else / finally здесь с краткими пояснениями, когда они выполняются.

try:
    with connection.cursor() as cursor:
        sql = "INSERT INTO "+DBTBL+" ("+DBFLD+") VALUES (%s,%s,%s,%s,%s,%s,%s)"
        cursor.execute(sql, (item))
except Exception: # If this code fails, ignore it
    pass
else: # If the code inside 'try' succeeds, execute this code. 
    connection.commit()
finally: # Regardless of whether or not the code inside 'try' succeeds, execute this code
    connection.close()
0 голосов
/ 25 октября 2019

Вы должны поймать исключение, чтобы мы могли обслуживать несколько типов, но чтобы быть уверенным и подготовить вас к работе, вы можете сделать следующее:)

try:
    with connection.cursor() as cursor:
        sql = (
                "INSERT INTO "+DBTBL+" ("+DBFLD+") VALUES " 
                "(%s,%s,%s,%s,%s,%s,%s)"
        )
        cursor.execute(
            sql,
            (item),
        )

    connection.commit()

except Exception as e:
    print("Error occurred: %s"% e)

finally:
    connection.close()
...