[Ayuda] Python - SyntaxError: invalid syntax

Iniciado por W17CH3R, 1 Agosto 2021, 12:24 PM

0 Miembros y 1 Visitante están viendo este tema.

W17CH3R

Hola a todos, la verdad llevo ya bastantes días quebrandome la cabeza, con un error que tengo en una línea de código en Python, cuando voy a ejecutar el código me manda el siguiente error en la línea 26:

Código (terminal) [Seleccionar]

 File "scan_port.py", line 26
   except hostname.error:
        ^
SyntaxError: invalid syntax


Probado con poner # al lado del comentario para ver si solo era ese error, y la verdad que no entiendo cual es el origen, porque me sigue diciendo que hay un error en la sinstasis.

Aquí pongo el codigo donde me indica donde esta el error (la verdad no le veo donde esta el error..)

Código (python) [Seleccionar]

except hostname.error:
print ("No puede resolver el hostname")
sys.exit()


Aquí les dejo el código completo del programa, para saber si pase algo por alto, porque no le encontre ningún error  :-\

Código (python) [Seleccionar]

# -------------------------------------------------------------------------------------------------
# ESCANER DE PUERTOS
# -------------------------------------------------------------------------------------------------

import nmap
import socket
import datetime
import sys
import os
now = datetime.datetime.now()
netmap = nmap.pScan.log()
remoteServer = input('Enter host:\n')
try:
remoteServerIP = socket.gethostbyname(remoteServer)
portRange = input('Escribe el rango del puerto usando - como separador:\n')
print ('-' * 60)
print ('Por favor espere, escaneando host remoto', remoteServerIP)
print ('-' * 60)
t1 = datetime.datetime.now()
netmap.scan(remoteServerIP, portRange)

except KeyboardInterrupt:
print ("Mantenga pulsado Ctrl+C")
sys.exit()

except hostname.error:
print ("No puede resolver el hostname")
sys.exit()

except socket.error:
print ("No puede conectarse al servidor")
sys.exit()

with open ("pScan.log", "a") as out:
for host in netmap.all_hosts():
print ('Host : ' + host + '(' + netmap[host].hostname() + ')')
out.write('Host : ' + host + '(' + netmap[host].hostname() + ')\n')
print ('State : %s' % netmap[host].state())
out.write('State : %s' % netmap[host].state()+"\n")
for proto in netmap[host].all_protocols():
print ('----------')
out.write('----------\n')
print ('Protocol : %s' % proto)
out.write('Protocol : %s' % proto+"\n")
lport = sorted(netmap[host][proto])

for port in lport:
print ('Port : %s\nState : %s' % (port, netmap[host][proto][port]['state']))
out.write('Port : ' + str(port) + '\nState  : ' + str(netmap[host][proto][port]['state'])+"\n")
print ('Name : '+netmap[host][proto][port]['name'])
out.write('Name : '+netmap[host][proto][port]['name']+"\n")
temp2 = str(now.year) + "/" + str(now.month) + "/" + str(now.day) + " "  + str(now.hour) + ":" + str(now.minute) + ":" + str(now.second)
print ("Date : " + temp2 + "\n\n")
out.write("Date : " + temp2 + "\n\n")
t2 = datetime.datetime.now()
total = t2 - t1
print ("Escaner es completado en ", str(total))
out.write("\nEscaner es completado en "+ str(total)+"\n")
print ('\n\nCSV:\n'+netmap.csv())
out.write('\n\nCSV:\n'+netmap.csv()+"\n")


No entiendo que habré hecho mal, la verdad hace tiempo que no escribo en python, y no se que hacer ya para solucionarlo, porque aun añadiendo un comentario al lado del código me salta el mismo error pero en la línea 30 :huh:
La importancia de los Datos es la importancia de los Recuerdos.

fzp

Perdón si escribo alguna burrada/obviedad, Python sólo he visto algo muy por encima. Pero bueno, si es el caso, con pasar de mi comentario, ya no hay problema.

En la sintaxis de Python ¿detrás de "except" se admiten expresiones que incluyan un punto?

Código (python) [Seleccionar]
except hostname.error:

Este tipo de código ¿no suele escribirse así?

Código (python) [Seleccionar]
except HostnameError:

En la línea 30 vuelve a haber lo mismo, un "except" con una expresión con punto ".". En cambio, en la 22 no (except KeyboardInterrupt: - no hay punto). Al ser Python interpretado, en el primer caso no llega a la línea 30. Cuando pones el primer error como comentario, te salta el error en el segundo.

Ya digo, es sólo una idea. Perdón si he hecho perder el tiempo a alguien. Como lleva ya rato sin contestación he querido echar una mano, pero igual he puesto una incoveniencia.

Danielㅤ

Hola, aquí te dejo información sobre ese tipo de error en específico:

https://stackoverflow.com/questions/11618118/python-check-if-a-hostname-is-resolved

en teoría ese tipo de error no existe así tal como lo estás intentando usar:

hostname.error

Por otro lado te recomiendo mucho que uses una función en vez de tener el código así suelto sin estructurar.


Saludos
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

DarK_FirefoX

Hola, no se que versión de Python estás usando pero te voy a redirigir a aqui (Python 3.8)

Entonces, el problema que le veo a tu codigo es con las lineas:

Código (python) [Seleccionar]
sys.exit()

Que estan fuera de la ejecución del bloque del
Código (python) [Seleccionar]
except

Esto:

Cita de: W17CH3R en  1 Agosto 2021, 12:24 PM
Código (python) [Seleccionar]

except hostname.error:
print ("No puede resolver el hostname")
sys.exit()


Debiera ser así:

Código (python) [Seleccionar]

except hostname.error:
print ("No puede resolver el hostname")
       sys.exit()


Ejemplo:

Código (python) [Seleccionar]

import sys

try:
   a = 0
   b = 1/0
except ZeroDivisionError:
   print("DIVISION")
   sys.exit()
except Exception:
   print("EXCEPTION")


NOTA: Este código no tiene ningun sentido, solo para demostrar el punto.

Salu2s, espero te ayude

W17CH3R

Cita de: fzp en  1 Agosto 2021, 15:18 PM


En la línea 30 vuelve a haber lo mismo, un "except" con una expresión con punto ".". En cambio, en la 22 no (except KeyboardInterrupt: - no hay punto). Al ser Python interpretado, en el primer caso no llega a la línea 30. Cuando pones el primer error como comentario, te salta el error en el segundo.

Ya digo, es sólo una idea. Perdón si he hecho perder el tiempo a alguien. Como lleva ya rato sin contestación he querido echar una mano, pero igual he puesto una incoveniencia.


Aun quitando el punto y dejando solamente hostname sige dandome el error, ni idea que será  :huh:




Cita de: Danielㅤ en  1 Agosto 2021, 15:23 PM
Hola, aquí te dejo información sobre ese tipo de error en específico:

https://stackoverflow.com/questions/11618118/python-check-if-a-hostname-is-resolved

en teoría ese tipo de error no existe así tal como lo estás intentando usar:

hostname.error

Por otro lado te recomiendo mucho que uses una función en vez de tener el código así suelto sin estructurar.


Gracias, le echaré un vistazo, lo tendré más en cuenta usar function



Cita de: DarK_FirefoX en  1 Agosto 2021, 15:34 PM
Hola, no se que versión de Python estás usando pero te voy a redirigir a aqui (Python 3.8)

Entonces, el problema que le veo a tu codigo es con las lineas:

Código (python) [Seleccionar]
sys.exit()

Que estan fuera de la ejecución del bloque del
Código (python) [Seleccionar]
except

Esto:

Debiera ser así:

Código (python) [Seleccionar]

except hostname.error:
print ("No puede resolver el hostname")
        sys.exit()


Ejemplo:

Código (python) [Seleccionar]

import sys

try:
    a = 0
    b = 1/0
except ZeroDivisionError:
    print("DIVISION")
    sys.exit()
except Exception:
    print("EXCEPTION")


NOTA: Este código no tiene ningun sentido, solo para demostrar el punto.

Salu2s, espero te ayude

Muchas gracias!!! eres un genio!!! bueno ya no me dio más el error en la sintaxis   ;-)
pero tendré muy en cuenta en donde cometí mi error de poner código fuera de la ejecución del bloque, aunque me esta dando ahora trabas con la línea 10, que no le veo sentido cuando antes no me dio ningún error, y al soluciónar el posicionamiento del sys.exit() fue cuando me dio el siguiente mensaje en el terminal...

Citar
línea 10: `now = datetime.datetime.now()'

Me has ayudado un monton con Aun me queda mucho por aprender de Python, y se que si logrará mejorar podría lograr programar muy buenas herramientas, acabo de mirar ahora mismo para ver que versión de Python tengo y es la versión 2.7.17, me recomiendas cambiarme a la versión 3??
La importancia de los Datos es la importancia de los Recuerdos.

DarK_FirefoX

De nada! ¿Cuál es el error que te da en la linea 10?

Código (python) [Seleccionar]
now = datetime.datetime.now()

Citarme recomiendas cambiarme a la versión 3??

Realmente, creo que sería una buena idea. Python 2 todavía es utilizado en algunos contextos porque existen librerias que todavía no tienen soporte en Python 3, pero poco a poco todas se han ido portando a la versión 3. Esta versión del lenguaje sigue siendo mantenida y cada cierto tiempo aparecen nuevas versiones con mejoras y nuevas características.

W17CH3R

Cita de: DarK_FirefoX en  2 Agosto 2021, 14:13 PM
De nada! ¿Cuál es el error que te da en la linea 10?


Literalmente lo que ves en la captura cuando lo ejecuto.

Código (python) [Seleccionar]
now = datetime.datetime.now()

y sí es en esa misma línea de código donde me da el siguiente error.



Cita de: DarK_FirefoX en  2 Agosto 2021, 14:13 PM

Realmente, creo que sería una buena idea. Python 2 todavía es utilizado en algunos contextos porque existen librerias que todavía no tienen soporte en Python 3, pero poco a poco todas se han ido portando a la versión 3. Esta versión del lenguaje sigue siendo mantenida y cada cierto tiempo aparecen nuevas versiones con mejoras y nuevas características.

Entonces también la versión 3 es mucho más estable que la 2?? aunque no se si puedo actualizar python directamente a la versión 3, o tener que desinstalarlo y volverlo a instalar pero como python3.
La importancia de los Datos es la importancia de los Recuerdos.