[Python] Hilo general

B

¿Alguien sabe por qué no entra en la función? (python-telegram-bot)

def funcion(update, context, args):
....
dispatcher.add_handler(CommandHandler('comando', funcion, pass_args=True))

la cosa es que quiero usar los argumentos del usuario pero si pongo "args" en la función ni me entra, de lo contrario entra pero no tengo forma de usar los argumentos. Llevo un rato mirando documentación y ejemplos y está correcto. Mi no entender.

3 respuestas
Krules

#661 *args ?

1 respuesta
B

#662 En ese caso entra a la función pero no hay nada en args
No puede ser tan complicado y más siguiendo la documentación y ejemplos, pero es que con args en parámetros de la def no me entra en la def.

eondev

#661 se acceden a los argumentos a través de context context.args[0]

2 respuestas
B

#664 ¿Entonces qué clase de documentación estoy viendo yo? ¿Está todo obsoleto? ¿Es nuevo?

1 respuesta
eondev

#665 No sé, he ido directo a buscar un ejemplo de como se hace en github:
https://github.com/python-telegram-bot/python-telegram-bot/blob/master/examples/timerbot.py

HeXaN

A mí, para cosas simples, me gusta más esta: https://github.com/eternnoir/pyTelegramBotAPI/blob/master/README.md

Thor

#661 es correcto lo que estas usando pero en la última versión si no recuerdo mal cambió, si quieres usarlo de esa forma tienes que usar la 11.
pip3 install telegram-python-bot==11.1.0
prueba con esa versión

1 respuesta
B

#668 me funcionó #664
Pero he pasado a #658 y mucho mejor 🤷‍♂️

B

Me acaba de pasar algo rarísimo. He actualizado python y ahora un script no se ejecuta porque da error de encoding con emojis. Puesto el comentario de coding a utf-8 me dice que el modulo telebot no se encuentra, cuando está instalado en global :man_shrugging:

¿Qué coño ha podido pasar?

PD: Vale, veo que tengo instalado en el pc python 2.7 y 3.7. No sé qué me ha instaldo 2.7 pero no he sido yo... quizá node, npm o a saber

1 respuesta
Kaiserlau

#670 tira siempre de entornos virtuales, tipo virtualenv o otros gestores. Así evitaras entre otras cosas el guarreo máximo.

1 respuesta
B

#671 pues me ha petado todo, no se por que node me ha instalado versiones anteriores de python y ahora no me reconoce modulos, ni pip, ni nada de nada... He reinstalado python habiendo borrado todas las versiones y ni aún así.

Vaya tela que mierdal me ha metido node.

Si uso "pip instal XXX" Fatal error in launcher: Unable to create process using '"c:\program files\python37\python.exe" "C:\Program Files\Python37\Scripts\pip.exe"'
tengo que usar "python -m pip"

No entiendo por qué :(

pd: He tenido que borrar todos los python, de program files, de usr/local, registros, variables de entorno.. e instalar de nuevo python 3.7 y de lujo
ahora reinstalar modulos y ya esta

¿Alguien me puede aclarar el tema de los entornos? Porque claro, algo usaría python 2.7 y me había machacado el cabrón de Node el entorno 3.7 por 2.7 y todo a la mierda. Los scripts no iban por ser una versión anterior, los módulos no los reconocía.. vaya tela.
Cómo puedo tener 3.7 porque lo uso yo y 2.7 porque lo necesita algo del pc, sin perder mi configuración 3.7 estándar?

1 respuesta
Lolerpopler

#672 como te han dicho usa entornos virtuales. Una vez en el entorno cuando invocas Python o pip tree cogera la version correspondiente.

desde la línea de comandos, en caso de tener los dos instalados Python invoca 2.7 y pyhton3 invoca 3.7

Puedes cambiar el pythonpath para que te apunte a una versión específica, pero puedes confundir a las otras aplicaciones así

1 respuesta
B

#673 es que ese es el tema. Instalé 3.7. todo perfecto, mis módulos, etc...

Instalo Node y npm, me instala 2.7 pero no sé cómo me cambia en el ordenador que el Python por defecto es el 2.7 en lugar de 3.7. joder, que deje todo como está y que node o npm use la versión 2.7, pero que no me toque el jodido pc...

No he usado entornos virtuales, pero no entiendo por qué una aplicación me instala un Python anterior y hace que TODO mi pc tenga por defecto en path y Windows y CMD el 2.7... no tiene sentido

2 respuestas
Fyn4r

#674 alias python=python3

1
Perrofeo

#674 Puedes usar conda... Es muy sencillo hacer entornos virtuales https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html

HeXaN

Siempre https://pipenv-es.readthedocs.io/es/latest/

1
eondev

Python 3.8 fuera
https://docs.python.org/3/whatsnew/3.8.html

Hay cosas chachis como la asignación := que hace lo mismo que el out en C# o los argumentos posicionales obligatorios con un / delante

3 1 respuesta
B

#678 La cosa es, como actualizo 3.7 a 3.8 para que TODO el pc use 3.8 ¿?
Dejando de lado entornos virtuales.

1 respuesta
HeXaN

#679 Usando entornos virtuales. Nunca se toca la versión del sistema.

1 1 respuesta
B

#680 ¿Y cuál ha de ser la versión de sistema? ¿2.7, 3.7, 3.8..? ¿Y por qué?

2 respuestas
HeXaN

#681 Depende de tu sistema. Y no se actualiza porque rompes cosas, para empezar xD

1 respuesta
Fyn4r

#681 La versión del sistema es la que traiga el sistema instalado. Esa no se toca bajo ningún concepto

1 respuesta
B

#682 #683 Pues cuando tuve el problema que dije arriba borré todo lo relacionado con python, progrram files, appdata, registros, variables entorno, etc, reinstalé 3.7 y todo perfecto, y se quedó en variable de sistema 3.7.

¿Interesa borrar todo de nuevo, empezar por 2.7 para que esté en el sistema y luego instalar posteriores?

PD: La primera vez que instalé python en mi pc la instalé manual en 3.7, al menos en variables de entorno estaba esa, fue cuando instalé node quien me bajó todo a 2.7, pero borré todo como digo y subí a 3.7. Nada más usaría previamente python.

De todas formas ya reinstalé la versión exacta 2.7 y la puse de nuevo en variable de sistema.
python -V me da 2.7 y py -V me da 3.8

Peredur

Hola, estoy empezando a tocar un poco python (vengo de otros lenguajes) y hay algo que no consigo entender. Se que es algo super basico y más después del nivel del hilo, perdón por la novatada
Haciendo unos ejercicios básicos de "que resultado da", me encuentro con algo así:

lst1=[1,2,3,4]
lst2=lst1
lst1[0]=7
print(lst2[0])

Mi primera reacción ha sido "1" pero me ha dado error y la respuesta correcta es "7" y no lo entiendo.
Si estoy asignando los valores de lst1 a lst2 y despues es cuando cambio el valor que hay en [0] de la lst1 y no al contrario, ¿por que se ha cambiado el valor tambien en lst2 si solo he cambiado el de lst1 despues del lst2=lst1?

2 respuestas
eondev

#685 Porque no estás asignando valores, sino que estás diciendo que lst2 apunte a lst1, es una referencia

1 respuesta
B

#685 porque ambos, al hacer la asignación de lst2=lst1 apuntan al mismo espacio de memoria, ergo es el mismo resultado en todo momento.

Es como hacer una constante de un [] vacío y luego hacer push, no da problema, añadas, quites o cambies elementos ya que la constante no ha cambiado y sigue apuntando al mismo sitio.

Para copiar lst2=lst1[:] o lst2=lst1.copy()

Podrían añadir los ... spread/rest de JavaScript que es muy útil para estas cosas.

1 respuesta
jaime9714

¿Me recomendáis alguna biblioteca de reconocimiento facial de Python? Quiero poder reconocer gestos en las caras y quería saber si alguno ha trabajado con algo parecido.
Después de esto,me gustaría crear data de caras que procese yo(amigos,familia...)

1 respuesta
Krules

#688 qué tramas, moreno?

2 respuestas
Peredur

#687 #686 vale, yo pensaba que estabas copiando los valores, como si fueran dos variables normales. Entonces en listas, lo que hace es referenciar.
Gracias