Mam czytnik QR. Kiedy czytnik QR skanuje, chcę monitorować to, co skanuje, Ale wpadłem na dziwny problem, a ponieważ jestem tak nowy w Pythonie, naprawdę nie mam pojęcia, dlaczego tak się dzieje. Okay, poniżej są dwa pozornie (dla mnie) identyczne programy, poza linią. Kiedy ta linia zostanie usunięta, otrzymuję inne wyniki (pozornie zmienia się zestaw znaków). NAPRAWDĘ nie rozumiem dlaczego.Dziwne zachowanie w Pythonie, Brak linii, różne wyjścia
test2.py:
# -*- coding: utf-8 -*-
import pyHook
import pythoncom
import re
import webbrowser
chars = ""
def pressed_chars(event):
global chars
if event.Ascii:
char = chr(event.Ascii)
if event.Ascii == 3:
quit()
else:
chars += char
print chars
proc = pyHook.HookManager()
proc.KeyDown = pressed_chars
proc.HookKeyboard()
pythoncom.PumpMessages()
Produkuje następujący wynik podczas skanowania kodu QR z treścią http://google.com
:
H
HT
HTT
HTTP
HTTP:
HTTP:?
HTTP:??
HTTP:??G
HTTP:??GO
HTTP:??GOO
HTTP:??GOOG
HTTP:??GOOGL
HTTP:??GOOGLE
HTTP:??GOOGLE>
HTTP:??GOOGLE>C
HTTP:??GOOGLE>CO
HTTP:??GOOGLE>COM
HTTP:??GOOGLE>COM
A teraz test3.py:
# -*- coding: utf-8 -*-
import pyHook
import pythoncom
import re
import webbrowser
endDomains = ".com|.net|.org|.edu|.gov|.mil|.aero|.asia|.biz|.cat|.coop|.info|.int|.jobs|.mobi|.museum|.name|.post|.pro|.tel|.travel".split("|")
chars = ""
def pressed_chars(event):
global chars
if event.Ascii:
char = chr(event.Ascii)
if event.Ascii == 3:
quit()
else:
chars += char
print chars
proc = pyHook.HookManager()
proc.KeyDown = pressed_chars
proc.HookKeyboard()
pythoncom.PumpMessages()
produkuje następujący wynik:
h
ht
htt
http
http;
http;/
http;//
http;//g
http;//go
http;//goo
http;//goog
http;//googl
http;//google
http;//google.
http;//google.c
http;//google.co
http;//google.com
http;//google.com
Po usunięciu dowolnej części zmiennej endDomains
program zmienia się. Czy są jakieś postacie, których nie widzę, usuwam lub coś, co zmienia rzeczy? Dlaczego u licha jest pyton wytwarzający te dwa zupełnie różne wyniki przy usuwaniu zmiennej, której program nawet nie używa?
Edytuj: Wygląda na to, że jest podłączony do .split("|")
, a raczej nie do zmiennej. Jeśli usuniemy program .split("|")
, program ponownie się zepsuje.
Druga Edycja Kredyt dla oryginalnego źródła, które użyłem idzie Janekmuric from their answer here.
Może jakiś inny plik zaimportował ten plik i w tym pliku użyto 'endDomains'. – ZdaR
@ZdaR, oh? Jak to przetestować? – Chud37
Zmiana 'endDomains' na inną nazwę, np.' End_domains' w celu ponownego sprawdzenia danych wyjściowych. –