Pycharm unused import statement

di il
5 risposte

Pycharm unused import statement

Salve a tutti sono ancora inesperto con la programmazione in python ho un problema nel mio programma di unused import statement, sto usando come IDE pycharm e non riesco a capire il motivo mi grigia alcune righe di codice sapete perchè? Credo perchè ritiene che non usi le funzione che importo ma in realtà non è vero perchè fa così?

Il mio programma deve prendere dei file generati da un programma TIE per l'analisi del traffico e poi tramite librerie pyshark xlwt e subprocess vado ad analizzare questi dati e li inserisco in un file .xlsx (tipo excel).

Mi va a grigiare le seguenti righe e mi dice selezionandole con il mouse unused import statement:

from datetime import datetime

from subprocess import Popen, PIPE
Ma io come vedete nel programma che metto sotto le uso sia pipe che poppen come mai mi fa questo come posso risolverlo? Ho inserito in pycharm per questo progetto ogni tipo di libreria di tipo datatime pyshark e subprocess ma non ne vuol sapere di funzionare
import subprocess
import pyshark
import xlwt

from datetime import datetime
from subprocess import Popen, PIPE

ip_tie = []

campi = ['Data', ' Protocol', 'DNS response address', 'DNS query name', 'SSL',
         'IP Source', 'IP Destination', 'IP Proto', 'TCP Source Port',
         'TCP Destination Port', 'TCP Source Port', 'Organisation', 'Reverse Host']

number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

name = ['renato']

workbook = xlwt.Workbook()

for n in name:
    for x in number:
        print('#### ANALISI FILE ' + n + str(x))
        r = 1
        sheet = workbook.add_sheet("Pacchetto" + n + str(x))
        style = xlwt.easyxf('font: bold 1')

        for c in range(0, len(campi) - 1):
            sheet.write(0, c, campi[c], style)
            sheet.col(c).width = 256 * 40

        file_name_tie = '/home/dario/Scrivania/retiprova1/' + n + '/' + n + str(x) + '/class' + n + str(x) + '.tie'
        file = open(file_name_tie, "r")
        righe = file.readlines()
        print('Inizio lettura .tie')

        for i in range(11, len(righe) - 1):
            riga = righe[i]
            elem = riga.split('\t')
            ip_dest = elem[2]
            ip_tie.append(ip_dest)

        print('Fine lettura .tie')

        file_name_pcap = '/home/dario/Scrivania/retiprova1/' + n + '/' + n + str(x) + '/traffic.pcap'
        cap = pyshark.FileCapture(file_name_pcap, display_filter='dns')
        dati = []

        try:
            for packet in cap:
                print('###Avvio analisi pacchetto')

                try:
                    data = datatime.fromtimestamp(float(packet.frame_info.time_epoch))
                except:
                    data = ''
                try:
                    protocol = packet.frame_info.protocols
                except:
                    protocol = ''
                try:
                    dns_addr = packet.dns.a
                except:
                    dns_addr = ''
                try:
                    dns_name = packet.dns.qry_name
                except:
                    dns_name = ''
                try:
                    ssl = packet.ssl.handshake_extensions_
                except:
                    ssl = ''
                try:
                    ip_src = packet.ip.dst
                except:
                    ip_src = ''
                try:
                    ip_dst = packet.ip.dst
                except:
                    ip_dst = ''
                try:
                    ip_proto = packet.ip.proto
                except:
                    ip_proto = ''
                try:
                    src_port = packet[packet.trasport_layer]
                except:
                    src_port = ''
                try:
                    dst_port = packet[packet.trasport_layer]
                except:
                    dst_port = ''

                tot = [data, protocol, dns_addr, dns_name, ssl, ip_src, ip_dst, ip_proto, src_port, dst_port]

                for ip in ip_tie:

                    if ip == dns_addr:

                        print('IP CORRISPONDONO: Avvio whois')
                        dati_agg_whois = ''
                        dati_agg_host = ''
                        proc = subprocess.Popen(['whois', ip], stdout=subprocess.PIPE)
                        output = proc.communicate(ip)[0]
                        o = output.split('\n')


                        for i in o:
                            p = i.split(':')
                            for m in p:
                                dati.append(m.lstrip().lower())
                                for i in 'org-name', 'orgname', 'person', 'netname':
                                    try:
                                        ind = dati.index(i)
                                        dati_agg_whois = dati_agg_whois + ' ' + dati[ind + 1]
                                    except:
                                        pass
                                print('Avvio analisi host')
                                proc = subprocess.Popen(['host', ip], stdout=subprocess.PIPE)
                                output = proc.communicate(ip)[0]
                                o = output.split(' ')
                                dati_agg_host = o[4].replace('\n', '')
                                tot.append(dati_agg_whois)
                                tot.append(dati_agg_host)
                                break
                        print(tot)

                        for c in range(0, len(tot) - 1):
                            dato = str(tot[c])
                            sheet.write(r, c, dato)

                        r = r + 1

                        print('Fine analisi pacchetto #')
        except:
            print('###ERRORE')

workbook.save('Analisi.gt.tie.xlsx')

Questi sono i risultati sulla shell:
 /home/dario/Scrivania/retiprova1/provaprogetto/venv/bin/python /home/dario/Scrivania/retiprova1/provaprogetto/prova.py
#### ANALISI FILE renato1
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato2
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato3
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato4
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato5
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato6
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato7
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato8
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato9
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato10
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato11
Inizio lettura .tie
Fine lettura .tie
###ERRORE
#### ANALISI FILE renato12
Inizio lettura .tie
Fine lettura .tie
###ERRORE

Process finished with exit code 0

 
Questo è quello che ottengo nel file "excel"

5 Risposte

  • Re: Pycharm unused import statement

    Alla riga 1 hai: import subprocess
    Popen e PIPE li richiami come subprocess.XXX

    datetime te lo segna inutilizzato perché c'è un errore di battitura dat-a-time --> data = datatime.fromtimestamp(float(packet.frame_info.time_epoch))

    Sulla causa dell'errore dovresti indagare sull'eccezione sollevata.

    In genere ti sconsiglio di utilizzare except senza indicare quali eccezioni debba gestire.
  • Re: Pycharm unused import statement

    SuperQWE ha scritto:


    Alla riga 1 hai: import subprocess
    Popen e PIPE li richiami come subprocess.XXX

    datetime te lo segna inutilizzato perché c'è un errore di battitura dat-a-time --> data = datatime.fromtimestamp(float(packet.frame_info.time_epoch))

    Sulla causa dell'errore dovresti indagare sull'eccezione sollevata.

    In genere ti sconsiglio di utilizzare except senza indicare quali eccezioni debba gestire.
    Ho fatto le modifiche che mi dicevi, sono un ignorante quindi può essere sicuramente mi sbaglierò, ho provato a mettere qualche print per capire dove fosse il problema.

    Mi fai qualche esempio su come gestire meglio errori su questo programma così poi mi esercito da solo? Mi pass qualche link per capirle meglio?

    Credo che all'inizio del primo try fallisca il for come se la variabile packet non si trovasse in nessun cap:
            file_name_pcap = '/home/dario/Scrivania/retiprova1/' + n + '/' + n + str(x) + '/traffic.pcap'
            cap = pyshark.FileCapture(file_name_pcap, display_filter='dns')
            dati = []
            print("PROVA")
            try:
                for packet in cap:
                    print('###Avvio analisi pacchetto')
    
                    try:
                        data = datetime.fromtimestamp(float(packet.frame_info.time_epoch))
                        print("OKDATA")
                    except:
                        data = ''
                        print("FAILDATA")
    Fino a prova stampa ma è strano ho provato a vedere se l'indirzzo che insersco nelle variabili file fosse giusta e lo è ad esempio ho messo le proprieta in un file generico .pcap e uno .tie:

    /home/dario/Scrivania/retiprova1/renato/renato1/traffic.pcap

    /home/dario/Scrivania/retiprova1/renato/renato1/classrenato1.tie

    Non mi riconosce la libreria pyshark? E quindi non mi inserisce niente in cap? Oppure sono ciuccio e non ho capito niente?

    Ti metto sotto tutto il programma e metto il link di foto degli errori che mi segnala pycharm:
    import subprocess
    import pyshark
    import xlwt
    
    from datetime import datetime
    
    ip_tie = []
    
    campi = ['Data', ' Protocol', 'DNS response address', 'DNS query name', 'SSL',
             'IP Source', 'IP Destination', 'IP Proto', 'TCP Source Port',
             'TCP Destination Port', 'TCP Source Port', 'Organisation', 'Reverse Host']
    
    number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    
    name = ['renato']
    
    workbook = xlwt.Workbook()
    
    for n in name:
        for x in number:
            print('#### ANALISI FILE ' + n + str(x))
            r = 1
            sheet = workbook.add_sheet("Pacchetto" + n + str(x))
            style = xlwt.easyxf('font: bold 1')
    
            for c in range(0, len(campi) - 1):
                sheet.write(0, c, campi[c], style)
                sheet.col(c).width = 256 * 40
    
            file_name_tie = '/home/dario/Scrivania/retiprova1/' + n + '/' + n + str(x) + '/class' + n + str(x) + '.tie'
            file = open(file_name_tie, "r")
            righe = file.readlines()
            print('Inizio lettura .tie')
    
            for i in range(11, len(righe) - 1):
                riga = righe[i]
                elem = riga.split('\t')
                ip_dest = elem[2]
                ip_tie.append(ip_dest)
    
            print('Fine lettura .tie')
    
            file_name_pcap = '/home/dario/Scrivania/retiprova1/' + n + '/' + n + str(x) + '/traffic.pcap'
            cap = pyshark.FileCapture(file_name_pcap, display_filter='dns')
            dati = []
            print("PROVA")
            try:
                for packet in cap:
                    print('###Avvio analisi pacchetto')
    
                    try:
                        data = datetime.fromtimestamp(float(packet.frame_info.time_epoch))
                        print("OKDATA")
                    except:
                        data = ''
                        print("FAILDATA")
                    try:
                        protocol = packet.frame_info.protocols
                    except:
                        protocol = ''
                    try:
                        dns_addr = packet.dns.a
                    except:
                        dns_addr = ''
                    try:
                        dns_name = packet.dns.qry_name
                    except:
                        dns_name = ''
                    try:
                        ssl = packet.ssl.handshake_extensions_
                    except:
                        ssl = ''
                    try:
                        ip_src = packet.ip.dst
                    except:
                        ip_src = ''
                    try:
                        ip_dst = packet.ip.dst
                    except:
                        ip_dst = ''
                    try:
                        ip_proto = packet.ip.proto
                    except:
                        ip_proto = ''
                    try:
                        src_port = packet[packet.trasport_layer]
                    except:
                        src_port = ''
                    try:
                        dst_port = packet[packet.trasport_layer]
                    except:
                        dst_port = ''
    
                    tot = [data, protocol, dns_addr, dns_name, ssl, ip_src, ip_dst, ip_proto, src_port, dst_port]
    
                    for ip in ip_tie:
    
                        if ip == dns_addr:
    
                            print('IP CORRISPONDONO: Avvio whois')
                            dati_agg_whois = ''
                            dati_agg_host = ''
                            proc = subprocess.Popen(['whois', ip], stdout=subprocess.PIPE)
                            output = proc.communicate(ip)[0]
                            o = output.split('\n')
    
    
                            for i in o:
                                p = i.split(':')
                                for m in p:
                                    dati.append(m.lstrip().lower())
                                    for i in 'org-name', 'orgname', 'person', 'netname':
                                        try:
                                            ind = dati.index(i)
                                            dati_agg_whois = dati_agg_whois + ' ' + dati[ind + 1]
                                        except:
                                            pass
                                    print('Avvio analisi host')
                                    proc = subprocess.Popen(['host', ip], stdout=subprocess.PIPE)
                                    output = proc.communicate(ip)[0]
                                    o = output.split(' ')
                                    dati_agg_host = o[4].replace('\n', '')
                                    tot.append(dati_agg_whois)
                                    tot.append(dati_agg_host)
                                    break
                            print(tot)
    
                            for c in range(0, len(tot) - 1):
                                dato = str(tot[c])
                                sheet.write(r, c, dato)
    
                            r = r + 1
    
                            print('Fine analisi pacchetto #')
            except:
                print('###ERRORE')
    
    workbook.save('Analisi.gt.tie.xlsx')
    /home/dario/Scrivania/retiprova1/provaprogetto/venv/bin/python /home/dario/Scrivania/retiprova1/provaprogetto/prova.py
    #### ANALISI FILE renato1
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato2
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato3
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato4
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato5
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato6
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato7
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato8
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato9
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato10
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato11
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    #### ANALISI FILE renato12
    Inizio lettura .tie
    Fine lettura .tie
    PROVA
    ###ERRORE
    
    Process finished with exit code 0

    Non sono molto esperto sai dirmi che cosa vogliano dire questi messaggi?
    https://imgur.com/EoxFl0
    https://imgur.com/9yOP2r
  • Re: Pycharm unused import statement

    "Too broad exception clause": significa quello che c'è scritto, ovvero "Clausola exception troppo ampia (generica)", poi ti suggerisce anche di leggere PEP 8.
    In pratica la sola "except:" senza alcun tipo di exception non è un errore ma viene considerata una pessima maniera di scrivere codice. Dal PEP 8:
    When catching exceptions, mention specific exceptions whenever possible instead of using a bare except: clause:
    try:
        import platform_specific_module
    except ImportError:
        platform_specific_module = None
    
    A bare except: clause will catch SystemExit and KeyboardInterrupt exceptions, making it harder to interrupt a program with Control-C, and can disguise other problems. If you want to catch all exceptions that signal program errors, use except Exception: (bare except is equivalent to except BaseException:).

    A good rule of thumb is to limit use of bare 'except' clauses to two cases:
  • Re: Pycharm unused import statement

    Andrea Quaglia ha scritto:


    "Too broad exception clause": significa quello che c'è scritto, ovvero "Clausola exception troppo ampia (generica)", poi ti suggerisce anche di leggere PEP 8.
    In pratica la sola "except:" senza alcun tipo di exception non è un errore ma viene considerata una pessima maniera di scrivere codice. Dal PEP 8:
    When catching exceptions, mention specific exceptions whenever possible instead of using a bare except: clause:
    try:
        import platform_specific_module
    except ImportError:
        platform_specific_module = None
    
    A bare except: clause will catch SystemExit and KeyboardInterrupt exceptions, making it harder to interrupt a program with Control-C, and can disguise other problems. If you want to catch all exceptions that signal program errors, use except Exception: (bare except is equivalent to except BaseException:).

    A good rule of thumb is to limit use of bare 'except' clauses to two cases:

    Ho capito potresti consigliarmi come gestire meglio le mie try except del mio programma mi faresti un esempio tu come ne scriveresti una? Invece per gli altri errori?
  • Re: Pycharm unused import statement

    Non ho la visione completa del tuo codice, quindi non posso darti suggerimenti dettagliati. Ma secondo quanto vedo molti statement possono essere sostituiti da statement if..else:
    if hasattr(packet, 'frame_info'):
    	protocol = packet.frame_info.protocols
    else:
    	protocol = ''
    Oppure:
    try:
    	protocol = packet.frame_info.protocols
    except ValueError:
    	protocol = ''
Devi accedere o registrarti per scrivere nel forum
5 risposte