Mitől függhet, hogy angol vagy magyar a hibaüzenet? (python3, urllib)
Meglehetősen szokatlan és számomra érthetetlen hibába futottam bele, tudniillik adott egy függvény, ami lekéri egy weboldal forráskódját, és közben mindenféle kivételeket kezel. Ezt a függvényt két különböző programba importálva és használva (a függvényt, és a két programot is én írtam) ugyanarra a hibára, ugyanarra a weboldalra, az egyikben magyar nyelvű, a másikban angol nyelvű hibaüzenetet ír ki.
Pl.:
<urlopen error [Errno -2] Name or service not known>
<urlopen error [Errno -2] A név vagy a szolgáltatás nem ismert>
Ez az urllib.error.URLError hibaosztály reason változójában jelenik meg, tehát nem arról van szó, hogy valahol saját hibaüzenetet jelenítek meg, valahol meg "gyárit".
- Milyen op.rendszer? Ahova importáltad, azok ugyanazon a gépen futnak, ugyanabban a környezetben?
- Használsz gettext vagy hasonló fordítási megoldást?
- A szkriptek első sorai ugyanazok? Linux alatt pl:
#!/usr/bin/env python3
Ugyanaz a gép.
Ugyanaz a honlap.
Ugyanaz a hiba: párhuzamosan fut mind a két program, kikapcsolom az internetet, erre mind a két program jelzi a hibát. Ebből következik, hogy nem lehet a szerver hibaüzenete, mert nincs kapcsolat.
Az egyik a python interpreterben volt, a másik pedig egy script. Most, hogy ezt leírtam, arra gondolok, hogy itt lehet a kutya elásva. De akkor sem értem.
És melyik írja ki melyik nyelven a hibát mégis?
Mondjuk így kód nélkül fullra vaktában lövöldözünk csak.
Azt hiszem, rájöttem, hogy mi okozza az eltérést konkrétan. Ez azonban még mindig magyarázatra szorul.
A magyar "verzió" egy grafikus program, aminek az elején van egy ilyen:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib, GObject
Ha ez ott van, akkor magyar a hibaüzenet, ha nincs, akkor angol.
Érdekes például az is, hogy
reason == "magyar string" -> False
reason == "angol string" -> True
pedig print(reason) -> "magyar string"
Már az elején is ezt mondtam volna mindenféle többi kommentár nélkül, de csak most járok itt.
Jól látszik a hívási láncolat : [link]
Az URLError-ból jön a hiba szövege. Az URLError meg az OSError-tól : [link]
Az OSError a pythonba beépített és nem pythonba megírt : [link]
A megfelelő hibaüzenet az operációs rendszer által biztosított azért lesz magyar.
Már a Gtk (a többit nem néztem) ami pythonba egy gi.overrides.GtkProxyModule típusú objektum. Ami nálam fizikailag a /usr/lib/x86_64-linux-gnu/girepository-1.0/Gtk-3.0.typelib fájl ami segítségével lesz felüldefiniálva az angol nyelvű hibaüzenet.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!