Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

131
Visualizações
¿Puedo introducir la salida de variables en el mensaje de afirmaciones?

Estoy haciendo una validación de los datos de entrada de un programa que he creado. Estoy haciendo esto con afirmar. Si surge la afirmación, quiero saber en qué parte de los datos se produce, así que quiero obtener el valor que surge de la afirmación.

 assert all(isinstance(e, int) for l1 in sequence.values() for l2 in l1 for e in l2),"Values of the dictionnary aren't lists of integers. Assert found in '{l2}'" # This code doesn't work
over 4 years ago · Santiago Trujillo
4 Respostas
Responde à pergunta

0

No cuando se usa all , ya que no expone la "variable de iteración". Necesitará un bucle anidado explícito. También olvidaste el prefijo f'' para denotar una cadena f:

 for l1 in [['a']]: for l2 in l1: for e in l2: assert isinstance(e, int), f"Values of the dictionnary aren't lists of integers. Assert found in '{l2}'"
 AssertionError: Values of the dictionnary aren't lists of integers. Assert found in 'a'
over 4 years ago · Santiago Trujillo Relatório

0

Puede usar una expresión de asignación para capturar el "testigo" de all los False que regresan. Para ello, eliminaremos algunos generadores. Usaremos map para aplicar isinstance a cada valor de l2 , lo que nos permite capturar el valor actual de l2 en una variable que persistirá para su uso en el mensaje de assert . También usaremos itertools.chain para eliminar la necesidad del nombre l1 .

 from itertools import chain def is_int(x): return isinstance(x, int) sequence = { 'key1': [[1, 2, 3], [4, 5, 6]], 'key2': [[7, 8, 9], ['a', 11, 12]] } assert all(all(map(is_int, (witness := l2))) for l2 in chain(*sequence.values())), \ f"Values of the dictionary aren't lists of integers. Assert found in '{witness}'"

Con una pequeña modificación, puede iterar sobre la sequence.items() para que también pueda capturar la clave cuya lista contiene el infractor l2 . Lo dejo como ejercicio para el lector.

over 4 years ago · Santiago Trujillo Relatório

0

Desempaquetaría todas sus e's y luego haría una afirmación:

 # Assuming l1 is a list of lists l1 = [[1,2,3], [4,5,6], ["7", 8, 9]] # TO TEST SUBLISTS l2 = [x for x in l1] for sublist in l2: assert all([isinstance(e, int) for x in sublist]), f'Values isn\'ta list of integers: {sublist}' # TO TEST FOR INDIVIDUAL VALUES all_e = [y for x in l1 for y in x] # To raise an error on each value: for e in all_e: assert(isinstance(e, int)), f'Value isn\'t an int: {e}' # To operate in one line assert all([isinstance(e, int) for x in all_e]), f'Values aren\'ta list of integers: {all_e}'
over 4 years ago · Santiago Trujillo Relatório

0

Podría recordarlo en una variable que se filtra simplemente insertando if [witness := l2] :

 sequence = { # thanks chepner 'key1': [[1, 2, 3], [4, 5, 6]], 'key2': [[7, 8, 9], ['a', 11, 12]] } assert all(isinstance(e, int) for l1 in sequence.values() for l2 in l1 if [witness := l2] for e in l2), f"Values of the dictionnary aren't lists of integers. Assert found in '{witness}'"

Producción:

 Traceback (most recent call last): File ".code.tio", line 6, in <module> assert all(isinstance(e, int) AssertionError: Values of the dictionnary aren't lists of integers. Assert found in '['a', 11, 12]'

¡Pruébelo en línea!

También podría usar (witness := l2) aquí en lugar de [witness := l2] , pero este último es aplicable en general.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda