2 votes

Utilisation du module de signalisation sans les avertissements de pylint (W0621 & W0613)

Je suis en train de découvrir le signal et j'ai écrit ce script pour ma première implémentation :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" First implementation of signal module """
import time
import signal
import os
import sys

def cls():
    """ console clearing """
    os.system('clear')
    return

def handler(signal, frame):
    """ Catch <ctrl+c> signal for clean stop"""
    print("{}, script stops".format(time.strftime('%H:%M:%S')))
    sys.exit(0)

signal.signal(signal.SIGINT, handler)

START_TIME = time.strftime('%H:%M:%S')
PROGRESSION = str()

while True:
    time.sleep(2)
    PROGRESSION += "."
    cls()
    print("{}, script starts\n{}".format(START_TIME, PROGRESSION))

Sauf l'ennuyeux ^C apparaissant après l'interruption, le script fonctionne comme prévu :

14:38:01, script starts
......
^C14:38:14, script stops

Cependant pylint3 la vérification me donne ce retour :

testsignal.py:16: [W0621(redefined-outer-name), handler] Redefining name 'signal' from outer scope (line 5)
testsignal.py:16: [W0613(unused-argument), handler] Unused argument 'signal'
testsignal.py:16: [W0613(unused-argument), handler] Unused argument 'frame'

Selon le documentation du signal Je l'ai bien fait.

Si je change la ligne 16, avec un trait de soulignement à la fin dans signal (comme mentionné dans PEP8 je résous l'avertissement W0621 .

Est-ce un effet secondaire de pylint ou ai-je manqué quelque chose ?

D'ailleurs, si quelqu'un sait comment éviter la ^C ficelle, je serai heureux aussi.

pylint3 --version
pylint3 1.5.2, 
astroid 1.4.4
Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1]

1voto

progmatico Points 2181

Pylint vous avertit que vous avez une fonction avec deux paramètres que vous n'utilisez pas à l'intérieur de la fonction, ce qui est vrai et constitue une odeur d'erreurs courantes.

Il met également en garde contre l'utilisation d'un nom de fonction locale égal à un nom d'étendue externe, ce qui peut parfois entraîner des erreurs, car vous pourriez masquer par inadvertance le nom externe. Parfois, vous le faites exprès, donc pylint vous embête un peu, mais vous pouvez aussi renommer la fonction locale, comme vous l'avez fait et vous débarrasser du danger.

Ce ne sont que des avertissements, pas des erreurs. En général, il est bon d'être averti des problèmes possibles, même s'ils n'existent pas.

Le vérificateur statique ne sait pas comment votre gestionnaire sera appelé par la bibliothèque des signaux. Mais l'avertissement n'a rien à voir avec cela. L'outil statique a simplement remarqué que vous prétendez recevoir deux paramètres mais que vous ne les utilisez pas dans le corps du gestionnaire. Normalement, lorsque vous recevez un paramètre, vous voulez l'utiliser, n'est-ce pas ? Sauf que, comme vous enregistrez un handler dans une bibliothèque pour le callback, vous devez respecter le "protocole" de la bibliothèque, sinon vous obtiendrez une erreur d'exécution lorsque le callback sera effectué à partir de là. L'outil statique ne sait pas que vous ne vous préoccupez pas de l'information sur les signaux reçus et que vous imprimez simplement autre chose ; il vous dit simplement : cela semble étrange, êtes-vous sûr ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X