Re: [python-brasil] Erro na execução do código, falha ao reiniciar o processo de leitura scanner

23 views
Skip to first unread message

Andrey Santos

unread,
Feb 13, 2024, 9:25:14 AMFeb 13
to python...@googlegroups.com
import pymysql
import datetime
import time
from utilitarios.usuarios import Senha_usuario
from utilitarios.equipamentos import Equipamentos
from utilitarios.ordem_producao import Ordem_producao
from automatico.codigo_barra import Codigo_barras
from automatico.producao_auto import ProducaoAuto
from utilitarios.barcode import ler_codigo_de_barras

def registro_producao_automatico():
    while True:
        print('Aguardando Leitura')
        Codigo_barras.codigo_barras = str(input(''))
        ler_codigo_de_barras("caminho_da_imagem.jpg")
       
        if Codigo_barras.codigo_barras == '9999999999999':
            print('Produçao Encerrada:')
            break

        elif len(Codigo_barras.codigo_barras) != 13:
            print('Código inválido: deve ter 13 dígitos')
            continue

        try:
            conexao = pymysql.connect(
                host='localhost',
                user='root',
                passwd='',
                database='automatizaf'
            )

            cursor = conexao.cursor()
            com1_sql = 'SELECT id_registro_producao FROM tb_registro_producao ORDER BY id_registro_producao DESC LIMIT 1 '
            cursor.execute(com1_sql)
            resultado1 = cursor.fetchall()
            cursor.close()
            resultado2 = list(resultado1[0])
            resultado3 = int(resultado2[0])
            resultadof = resultado3 + 1
            id_registro_producao = resultadof

            cursor = conexao.cursor()
            com2_sql = "SELECT registro_producao_auto FROM tb_registro_producao WHERE ordem_producao = %s ORDER BY id_registro_producao DESC LIMIT 1"
            cursor.execute(com2_sql, Ordem_producao.ordem_producao)
            resultado4 = cursor.fetchall()
            cursor.close()
            resultado5 = list(resultado4[0])
            resultado6 = int(resultado5[0])
            resultadoG = resultado6 + 1
            registro_producao_auto = resultadoG

            data1 = datetime.date.today()
            data2 = datetime.date.today()
            hora1 = time.strftime('%H:%M:%S')
            hora2 = time.strftime('%H:%M:%S')

            cursor = conexao.cursor()
            com3_sql = "INSERT INTO tb_registro_producao (id_registro_producao, ordem_producao, codigo_equipamento, senha_usuario, codigo_produto, registro_producao_manual, registro_producao_auto, data_inicio_producao, hora_inicial_producao, data_final_producao, hora_final_producao) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
            valor1 = (
                id_registro_producao,
                Ordem_producao.ordem_producao,
                Equipamentos.codigo_equipamento,
                Senha_usuario.senha_usuario,
                Codigo_barras.codigo_barras,
                '',
                registro_producao_auto,
                data1,
                hora1,
                data2,
                hora2
            )
            cursor.execute(com3_sql, valor1)
            conexao.commit()
            print(f'Registro de produção número: {id_registro_producao}')
            ProducaoAuto.registro_producao_auto = str(registro_producao_auto)
        except Exception as erro:
            print(erro)

if __name__ == "__main__":
    registro_producao_automatico()

  • Remove chamada recursiva registro_producao_automatico() dentro do bloco try, pois isso pode levar a um estouro de pilha (stack overflow). Em vez disso, movi a chamada para fora do bloco try.
  • Corrige o erro que você estava enfrentando ao tentar ler o código de barras após a primeira leitura. Agora, após inserir um novo código de barras, o programa continuará sua execução.
  • Removi a necessidade de definir data1, data2, hora1 e hora2 globalmente, pois esses valores são obtidos dentro do loop de registro.
Prof.Thaynan Andrey Lucena 

Engenheiro 
Cientista de Dados 



Sergio Iescas <ac.tec.a...@gmail.com> escreveu (terça, 13/02/2024 à(s) 08:52):
Bom dia a todos na santa e poderosa paz do Senhor Jesus, algum dos irmãos poderia por favor me ajudar a consertar o erro apresentado a seguir.erro 1.png
Após realizar a primeira leitura e realizar a gravação na BD eu preciso reiniciar o processo de leitura para uma nova gravação, porem após realizar a primeira leitura segue o erro acima.
segue código onde na linha (19) em negrito sublinhada é chamada a função de leitura do código de barras.
Nota: Inserindo o código de barras manualmente o programa funcionar perfeitamente.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
import pymysql
import datetime, time
from utilitarios.usuarios import Senha_usuario
from utilitarios.equipamentos import Equipamentos
from utilitarios.ordem_producao import Ordem_producao
from automatico.codigo_barra import Codigo_barras
from automatico.producao_auto import ProducaoAuto
from utilitarios.barcode import ler_codigo_de_barras
data1 = datetime.date.today()
data2 = datetime.date.today()
hora1 = time.strftime('%H:%M:%S')
hora2 = time.strftime('%H:%M:%S')


def registro_producao_automatico():
    print('Aguardando Leitura')
    while 1:
        Codigo_barras.codigo_barras = str(input(''))
        ler_codigo_de_barras("caminho_da_imagem.jpg")
        if Codigo_barras.codigo_barras == '9999999999999':
            print('Produçao Encerrada:')
            break

        elif len(Codigo_barras.codigo_barras) != 13:
            print('codigo invalido > 0u < 13 digitos')
            continue
        else:
            try:
                conexao = pymysql.connect(
                    host='localhost',
                    user='root',
                    passwd='',
                    database='automatizaf')
                cursor = conexao.cursor()
                com1_sql = 'SELECT id_registro_producao FROM tb_registro_producao ' \
                           'ORDER BY id_registro_producao DESC LIMIT 1 '
                cursor.execute(com1_sql)
                resultado1 = cursor.fetchall()
                cursor.close()
                resultado2 = list(resultado1[0])
                resultado3 = int(resultado2[0])
                resultadof = resultado3 + 1
                id_registro_producao = resultadof
                cursor = conexao.cursor()
                com2_sql = "SELECT registro_producao_auto FROM tb_registro_producao" \
                           " WHERE ordem_producao = %s ORDER BY id_registro_producao DESC LIMIT 1"
                cursor.execute(com2_sql, Ordem_producao.ordem_producao)
                resultado4 = cursor.fetchall()
                cursor.close()
                resultado5 = list(resultado4[0])
                resultado6 = int(resultado5[0])
                resultadoG = resultado6 + 1
                registro_producao_auto = resultadoG
                cursor = conexao.cursor()
                com3_sql = "INSERT INTO tb_registro_producao" \
                           " (id_registro_producao," \
                           " ordem_producao," \
                           " codigo_equipamento," \
                           " senha_usuario," \
                           " codigo_produto," \
                           " registro_producao_manual," \
                           " registro_producao_auto," \
                           " data_inicio_producao," \
                           " hora_inicial_producao," \
                           " data_final_producao," \
                           " hora_final_producao)" \
                           " VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
                valor1 = (
                    id_registro_producao, Ordem_producao.ordem_producao,
                    Equipamentos.codigo_equipamento, Senha_usuario.senha_usuario, Codigo_barras.codigo_barras,
                    '', registro_producao_auto, data1, hora1, data2, hora2)
                cursor.execute(com3_sql, valor1)
                conexao.commit()
                print(f'Registro de produção numero: {id_registro_producao}')
                ProducaoAuto.registro_producao_auto = str(registro_producao_auto)
                registro_producao_automatico()
            except Exception as erro:
                print(erro)
visualização do codigo linha 19 chamada a função barcode.png
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
segue código utilizado na leitura código de barras scanner manual.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
from PIL import Image
from pyzbar.pyzbar import decode


def ler_codigo_de_barras(caminho_da_imagem):
    imagem = Image.open(caminho_da_imagem)
    imagem = imagem.convert("L")

    codigos_barras = decode(imagem)

    if len(codigos_barras) > 0:
        barcod_codigo = codigos_barras[0].data.decode("utf-8")
        return barcod_codigo
    else:
        return

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para acessar essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/f53a8cd5-7b38-4990-8e33-ad618e97e9dcn%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages