» »

Python keyError 3

Python keyError 3

filips ::

Imam spodnjo kodo:
import os
import os.path

global classShow
global otherShow
global stevilo
global komentar
global status
global status_message
global value
global file
global string

stevilo=0
status=1
value={}
string=''
komentar={}

def toString(className='',addclass='',addnoclass=''):
    global status
    global string
    global komentar
    global classShow
    global otherShow
    global value
    if status!=0:
        if classShow=='' or otherShow=='':
            status_message=language.showClassShowOther
            status=0
        if classShow==1:
            string += "class "+className+''':
    '''
            if komentar!='':
                string += '#'+komentar[0]+"\n\t"
                for k, v in value.items():
                    if(v[1] == ''):
                        string += 'public '+k+"='"+v[0]+'''" 
    '''		
                    else:
                        string += 'public '+k+"='"+v[0]+'" #'+v[1]+'''
    '''	
                    print (v[2]) #zbriši
                    if komentar[v[2]] in globals():
                        string += '''
	#'''+komentar[v[2]]+'''
    '''
        if addclas!='':
            string +='''
    '''+addclass+'''
    '''
            string +='''
'''
        if otherShow==1:
            if komentar[0] in globals():
                string += '#'+komentar[0]+''
            for k, v in value.items():
                if v['1'] == '':
                    string += '''
'''+k+'="'+v[0]+'"'
                else:
                    string += '''
'''+k+'="'+v[0]+'" #'.v[1]
                    if komentar[v[2]] in globals():
                        string += '''
#'''+komentar[v[2]]+''
            if addnoclass!='':		
                string +='''
'''+addnoclass+''
        return string
V if stavku:
                    if komentar[v[2]] in globals():
                        string += '''
	#'''+komentar[v[2]]+'''
    '''
želim preveriti če spremennljivka komentar[v2] obstaja in če obstaja naj izpiše neko besedilo. Meni pa napiše napako:
Traceback (most recent call last):
  File "C:\Users\Miha\documents\visual studio 2015\Projects\Python config\Python config\pythonConfig\pythonConfig.py", line 120, in <module>
    toString('className','addclass','addnoclass')
  File "C:\Users\Miha\documents\visual studio 2015\Projects\Python config\Python config\pythonConfig\pythonConfig.py", line 79, in toString
    if komentar[v[2]] in globals():
KeyError: 3
Press any key to continue . . .
kaj je narobe sem poskusil ugotoviti s
print (komentar[0] in globals())
pa mi napiše enako napako

Spremenljivke pa imam komentar={0: '00', 1: '01', 2: '02'} in value={'a': ['b', 'c', 1], 'a2': ['b2', 'c2', 2], 'a3': ['b3', 'c3', 3]}
  • spremenil: filips ()

BigWhale ::

A lahko posljes kodo preden jo pozenes skozi code obfuscator?

Tako bo koda malo lazje berljiva.

Zgodovina sprememb…

  • spremenil: BigWhale ()

filips ::

Koda:
import os
import os.path

global classShow
global otherShow
global stevilo
global komentar
global status
global status_message
global value
global file
global string

stevilo=0
status=1
value={}
string=''
komentar={}

def toString(className='',addclass='',addnoclass=''):
global status
global string
global komentar
global classShow
global otherShow
global value
if status!=0:
if classShow=='' or otherShow=='':
status_message=language.showClassShowOther
status=0
if classShow==1:
string += "class "+className+''':
'''
if komentar!='':
string += '#'+komentar[0]+"\n\t"
for k, v in value.items():
if(v[1] == ''):
string += 'public '+k+"='"+v[0]+'''"
'''
else:
string += 'public '+k+"='"+v[0]+'" #'+v[1]+'''
'''
print (v[2]) #zbriši
if komentar[v[2]] in globals():
string += '''
#'''+komentar[v[2]]+'''
'''
if addclas!='':
string +='''
'''+addclass+'''
'''
string +='''
'''
if otherShow==1:
if komentar[0] in globals():
string += '#'+komentar[0]+''
for k, v in value.items():
if v['1'] == '':
string += '''
'''+k+'="'+v[0]+'"'
else:
string += '''
'''+k+'="'+v[0]+'" #'.v[1]
if komentar[v[2]] in globals():
string += '''
#'''+komentar[v[2]]+''
if addnoclass!='':
string +='''
'''+addnoclass+''
return string

Tabulatorji mi ne primejo

Zgodovina sprememb…

  • spremenil: filips ()

Roadkill ::

Dying over here. :O
Ü

Roadkill ::

Za štart spremeni kodo, da ne boš uporabljal globalov. Ker ne veš čemu so namenjeni.

Lahko tudi probaš razložit kaj naj bi koda počela, ker se tele zmešnjave nikomur ne ljubi brat.
Ü

hruske ::

if komentar[v[2]] in globals():


Tule ima v[2] vrednost 3, ampak ta vrednost kot key ni v dictu komentar.

Samo ... a ta moj odgovor razumeš bolj, kot mi tvojo kodo?

Namreč ... slogovno je tvoja koda grozno neberljiva. Poglej si kak pylint ali flake8, ki ti povesta kako lahko svojo kodo približaš standardom, tako da jo bo znal še kdo kdaj prebrati.
Kalkulator nove omrežnine 2024 - https://omreznina.karlas.si/Kalkulator

Zgodovina sprememb…

  • spremenilo: hruske ()

Gandalfar ::

# -*- coding: utf-8 -*-
import os
import os.path

global classShow
global otherShow
global stevilo
global komentar
global status
global status_message
global value
global file
global string

stevilo=0
status=1
value={}
string=''
komentar={}

def toString(className='',addclass='',addnoclass=''):
    global status
    global string
    global komentar
    global classShow
    global otherShow
    global value
    
    if status != 0:
        if not classShow or not otherShow:
            status_message = language.showClassShowOther
            status = 0
        else if classShow == 1:
            string += "class {}:\n".format(className)
            if komentar:
                string += '#{}\n\t'.format(komentar[0])
                for k, v in value.items():
                    if (v[1] == ''):
                        string += 'public {}={}\n'.format(k, v[0])
                    else:
                        string += 'public {}={} #{}\n'.format(k, v[0], v[1])

                    if v[2] in komentar and komentar[v[2]] in globals():
                        string += "\n#".format(komentar[v[2]])
                        # itd..


Toliko, da se lahko znebiš teh ''': https://mkaz.tech/python-string-format....

filips ::

Sem popravil kodo, pa mi še vedno ne dela:
def toString(className='',addclass='',addnoclass=''):
    '''change to type string'''
    global status
    global string
    global komentar
    global classShow
    global otherShow
    global value
    if status!=0:
        if classShow=='' or otherShow=='':
            status_message=language.showClassShowOther
            status=0
        else:
            if classShow==1:
                string += "class {}:\n    ".format(className)
                if komentar!='':
                    string +="#{}\n    ".format(komentar[0])
                for k, v in value.items():
                    if(v[1] == ''):
                        string += "global {}\n    {}='{}'\n    ".format(k,k,v[0])
                    else:
                        string += "global {}\n    {}='{}' #{}\n    ".format(k,k,v[0],v[1])	
                    try:
                        komentar[v[2]]
                    except NameError:
                        komentar[v[2]]=None
                    if komentar[v[2]] is None:
                        pass
                    else:
                        string += "\n    #{}\n    ".format(komentar[v[2]])
                if addclas!='':
                    string +="\n    {}\n    ".format(addclass)
                    string +="\n"
            if otherShow==1:#tu sem ostal
                if komentar[0] in globals():
                    string += "#{}".format(komentar[0])
                for k, v in value.items():
                    if v['1'] == '':
                        string += "\n    {}='{}".format(k,v[0])
                    else:
                        string += "\n    {}='{} #{}".format(k,v[0],v[1])
                    try:
                        komentar[v[2]]
                    except NameError:
                        komentar[v[2]]=None
                    if komentar[v[2]] is None:
                        pass
                    else:
                        string += "\n#{}".format(komentar[v[2]])
                if addnoclass!='':		
                    string += "\n{}".format(addnoclass)
            return string

Popravil sem if stavek, ki mi dela težave:
                    try:
                        komentar[v[2]]
                    except NameError:
                        komentar[v[2]]=None
                    if komentar[v[2]] is None:
                        pass
                    else:
                        string += "\n#{}".format(komentar[v[2]])
tukaj želim preveriti, če komentar[v[2]] obstaja, pa mine dela

hruske ::

Kdaj ti Python interpreter vrže NameError in kdaj KeyError?
Kalkulator nove omrežnine 2024 - https://omreznina.karlas.si/Kalkulator

filips ::

V tistem if stavku mi python vrže to:
Traceback (most recent call last):
  File "C:\Users\Miha\documents\visual studio 2015\Projects\Python config\Python config\pythonConfig\pythonConfig.py", line 126, in <module>
    toString('className','addclass','addnoclass')
  File "C:\Users\Miha\documents\visual studio 2015\Projects\Python config\Python config\pythonConfig\pythonConfig.py", line 83, in toString
    komentar[v[2]]
KeyError: 3
Press any key to continue . . .

hruske ::

Kalkulator nove omrežnine 2024 - https://omreznina.karlas.si/Kalkulator

filips ::

V napaki mi napiše da je KeyError 3

hruske ::

Zakaj potem loviš NameError?

try:
    komentar[v[2]]
except NameError:
    komentar[v[2]]=None
Kalkulator nove omrežnine 2024 - https://omreznina.karlas.si/Kalkulator

filips ::

KeyError sem zdaj popravil.

Zdaj imam to kodo:
def toString(className='',addclass='',addnoclass=''): #popravi vrstni red izpisovanja
    '''change to type string'''
    global status
    global string
    global komentar
    global classShow
    global otherShow
    global value
    if status!=0:
        if classShow=='' or otherShow=='':
            status_message=language.showClassShowOther
            status=0
        else:
            if classShow==1:
                string += "class {}:\n    ".format(className)
                try:
                    komentar[0]
                except KeyError:
                    komentar[0]=None
                if komentar[0] is None:
                    pass
                else:
                    string +="#{}\n    ".format(komentar[0])
                for k, v in value.items():
                    if(v[1] == ''):
                        string += "global {}\n    {} = '{}'\n    ".format(k,k,v[0])
                    else:
                        string += "global {}\n    {} = '{}' #{}\n    ".format(k,k,v[0],v[1])	
                    try:
                        komentar[v[2]]
                    except KeyError:
                        komentar[v[2]]=None
                    if komentar[v[2]] is None:
                        pass
                    else:
                        string += "\n    #{}\n    ".format(komentar[v[2]])
                if addclass!='':
                    string +="\n    {}\n    ".format(addclass)
                    string +="\n"
            if otherShow==1:
                try:
                    komentar[0]
                except KeyError:
                    komentar[0]=None
                if komentar[0] is None:
                    pass
                else:
                    string += "#{}".format(komentar[0])
                for k, v in value.items():
                    if v[1] == '':
                        string += "\n{} = '{}'".format(k,v[0])
                    else:
                        string += "\n{} = '{}' #{}".format(k,v[0],v[1])
                    try:
                        komentar[v[2]]
                    except KeyError:
                        komentar[v[2]]=None
                    if komentar[v[2]] is None:
                        pass
                    else:
                        string += "\n\n#{}".format(komentar[v[2]])
                if addnoclass!='':		
                    string += "\n{}".format(addnoclass)
            return string
Spremenljivke imam value={'a': ['b', 'c', 1], 'a2': ['b2', 'c2', 2], 'a3': ['b3', 'c3', 3]} in komentar={0: '00', 1: '01', 2: '02', 3: None}
S funkcijo toString bi rad da mi vrne tole:
class className:\n    #00\n    global a\n    a = 'b' #c\n    \n    #01\n    global a2\n    a2 = 'b2' #c2\n    \n    #02\n    global a3\n    a3 = 'b3' #c3\n    \n    addclass\n    \n\n#00\na = 'b' #c\n#01\na2 = 'b2' #c2\n#02\na3 = 'b3' #c3\n\naddnoclass
torej bi napisalo:
class className:
    #00
    global a
    a = 'b' #c

    #01
    global a2
    a2 = 'b2' #c2

    #02
    global a3
    a3 = 'b3' #c3

    addclass


#00
a = 'b' #c
#01
a2 = 'b2' #c2
#02
a3 = 'b3' #c3

addnoclass
če pa zaženem to kodo pa mi napiše s čisto premešanim vrstnim redom kot je:
class className:
    #00
    global a3
    a3 = 'b3' #c3
    global a2
    a2 = 'b2' #c2
    
    #02
    global a
    a = 'b' #c
    
    #01
    
    addclass
    
#00
a3 = 'b3' #c3
a2 = 'b2' #c2

#02
a = 'b' #c

#01
addnoclass
kaj naj naredim, da bo napisalo, tako kot bi jaz želel?

Odgovor prosim čim prej

Zgodovina sprememb…

  • spremenil: filips ()

filips ::

Kako bi naredil da bi vrnilo to v pravem vrstnem redu

Prosim za čimprejšnji odgovor

Zgodovina sprememb…

  • spremenil: filips ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Slo-Tech userscripts

Oddelek: Izdelava spletišč
175195 (2647) jype
»

Python končnica datoteke

Oddelek: Programiranje
51111 (1026) filips
»

Python napaka: IndentationError: unindent does not match any outer indentation level

Oddelek: Programiranje
13792 (722) jan_g
»

[Java]kompailiranje iz cmd

Oddelek: Programiranje
91314 (1038) ragezor
»

[C++] for {}

Oddelek: Programiranje
291719 (1413) Gundolf

Več podobnih tem