Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 变量不工作。。。或者我';我错过了什么?_Python_Variables_Numbers_Docx - Fatal编程技术网

Python 变量不工作。。。或者我';我错过了什么?

Python 变量不工作。。。或者我';我错过了什么?,python,variables,numbers,docx,Python,Variables,Numbers,Docx,我正在尝试对docx文件进行一些编辑。。。将一个数字转换成字母(即,如果变量等于01='1',等于02='2',依此类推,但用西班牙语)。问题是变量f_dia_nom不起作用。。。它甚至没有打印任何东西。。。我做错什么了吗??还是我遗漏了什么 #!/usr/bin/env python2.6 from Tkinter import * from docx import * import tkMessageBox root = Tk() nombre = "" exp_no = "" ubi

我正在尝试对docx文件进行一些编辑。。。将一个数字转换成字母(即,如果变量等于01='1',等于02='2',依此类推,但用西班牙语)。问题是变量
f_dia_nom
不起作用。。。它甚至没有打印任何东西。。。我做错什么了吗??还是我遗漏了什么

#!/usr/bin/env python2.6

from Tkinter import *
from docx import *
import tkMessageBox

root = Tk()

nombre = ""
exp_no = ""
ubic = ""
munic = ""
prov = ""
f_dia = ""
f_dia2 = ""
f_dia_nom = ""

def nombre_dia():
         if f_dia2 == 1 or f_dia2 == 01:        
             f_dia_nom = "Un"
         elif f_dia2 == 2 or f_dia2 == 02:               
             f_dia_nom  =  "Dos"
         elif f_dia2 == 3 or f_dia2 == 03:        
             f_dia_nom = "Tres"
         elif f_dia2 == 4 or f_dia2 == 04:               
             f_dia_nom = "Cuatro"
         elif f_dia2 == 5 or f_dia2 == 05:               
             f_dia_nom = "Cinco"
         elif f_dia2 == 6 or f_dia2 == 06:        
             f_dia_nom = "Seis"
         elif f_dia2 == 7 or f_dia2 == 07:               
             f_dia_nom = "Siete"             
         else:
             f_dia_nom = "Error"

# Hacer el docx      
def makedocx():
         if __name__ == '__main__':        
             # Default set of relationshipships - these are the minimum components of a document
             relationships = relationshiplist()

             # estructura del documento
             document = opendocx('test.docx')
             docbody = document.xpath('/w:document/w:body',namespaces=nsprefixes)[0]

             # Buscar y reemplazar
             print 'Replacing ...',
             docbody = replace(docbody,'V_EXP',en1.get())            
             docbody = replace(docbody,'V_NOMBRE',en0.get()) 
             docbody = replace(docbody,'V_OPERACION',op.get())           
             docbody = replace(docbody,'V_UBIC',en3.get())
             docbody = replace(docbody,'V_MUNI',en4.get())
             docbody = replace(docbody,'V_PROV',en5.get())
             docbody = replace(docbody,'V_F_DIA',en6.get())
             docbody = replace(docbody,'V_F_MES',mes.get())          
             docbody = replace(docbody,'V_F_SEM',sem.get())
             docbody = replace(docbody,'V_NUM_DIA',en7.get())            
             nombre_dia()
             docbody = replace(docbody,'V_NOM_DIA',f_dia_nom)            
             print 'f_dia_nom'
             print 'done.'

如果测试您是否在主模块中,请去掉
。(您特别要求运行的)。我猜你不是


if uuu name uuu='uuu main uuu'
只有在模块级别(在任何函数之外,因此可以检测是否正在运行或正在导入)时才有意义。

f_dia_nom
是一个全局变量,这并不是一个好的开始。如果要对其进行操作,请将
f_dia2
作为参数传递给函数
nombre_dia()
,然后从函数返回
f_dia_nom

def nombre_dia(f_dia2):
         if f_dia2 == 1 or f_dia2 == 01:        
             f_dia_nom = "Un"
         elif f_dia2 == 2 or f_dia2 == 02:               
             f_dia_nom  =  "Dos"
         elif f_dia2 == 3 or f_dia2 == 03:        
             f_dia_nom = "Tres"
         elif f_dia2 == 4 or f_dia2 == 04:               
             f_dia_nom = "Cuatro"
         elif f_dia2 == 5 or f_dia2 == 05:               
             f_dia_nom = "Cinco"
         elif f_dia2 == 6 or f_dia2 == 06:        
             f_dia_nom = "Seis"
         elif f_dia2 == 7 or f_dia2 == 07:               
             f_dia_nom = "Siete"             
         else:
             f_dia_nom = "Error"

         return f_dia_nom

if __name__ == '__main__':
    # All your other code...
    f_dia_nom = nombre_dia(f_dia2)
    print 'f_dia_nom =', f_dia_nom
    docbody = replace(docbody,'V_NOM_DIA',f_dia_nom)
    print 'done.'

很难准确地看到代码中应该发生什么,但有几点:

  • 您正在打印字符串“f_dia_nom”,而不是变量f_dia_nom

  • 如果不先使用
    global
    ,就无法从函数内部更改全局变量

  • 无需对照1和01(等)进行检查,因为1==01

  • 你似乎没有在任何地方设置/创建
    f_dia2


  • 查找python的“全局范围”规则。一般来说,尽量避免使用全局变量(如果只是为了避免这样的错误)

    在名称()中:

    或者任何其他赋值,python编译器都会在nombre__dia函数的本地创建该数字

    修改函数以将f_dia_nom声明为全局函数:

    def nombra_dia():
       global f_dia_nom
    
       ...
    
    它将把名字视为全球名字

    工具书类
    学习Python第四版第408页

    或使用
    全局
    邪恶的咯咯笑来匹配绿头头像(+1)永远不要使用
    全局
    !(除非你能帮上忙!)
    makedocx
    被调用了吗?这只是代码的一部分。。。有问题的那个…我很高兴。但是,请确保您知道它为什么起作用。理解给定语言范围规则的细微差别是超越noobdum(noobness?)的可靠方法。
    def nombra_dia():
       global f_dia_nom
    
       ...