Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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中忽略get_row函数_Python_Function_Csv_Printing - Fatal编程技术网

在python中忽略get_row函数

在python中忽略get_row函数,python,function,csv,printing,Python,Function,Csv,Printing,我编写了一个函数从csv文件中获取行数据,但失败了。因此,我插入了这么多“打印”以查看错误。但令我惊讶的是,控制台一直是空的,这很奇怪。我已经多次修改代码 我的代码被破坏了: # -*- coding: utf-8 -*- import csv def get_rows(csv_file): print '0' reader=csv.reader(open(csv_file)) print '1' #get the colnum names,lowercased

我编写了一个函数从csv文件中获取行数据,但失败了。因此,我插入了这么多“打印”以查看错误。但令我惊讶的是,控制台一直是空的,这很奇怪。我已经多次修改代码 我的代码被破坏了:

# -*- coding: utf-8 -*-
import csv

def get_rows(csv_file):
    print '0'
    reader=csv.reader(open(csv_file))
    print '1'
    #get the colnum names,lowercased
    col_names=tuple(k.lower() for k in reader.next())
    print '2' 
    for row in reader:
        yield dict(zip(col_names,row))
    print col_names

def main():
    file_name='companylist.csv'

    try:
        get_rows(file_name)
    except:
        print 'OK'
if __name__=='__main__':
    main()

而代码:

# -*- coding: utf-8 -*-
import csv

reader=csv.reader(open('companylist.csv'))
col_names=tuple(k.lower() for k in reader.next())
for row in reader:
    dict(zip(col_names,row))
print col_names
# -*- coding: utf-8 -*-
import csv

def main():
    reader=csv.reader(open('companylist.csv'))
    col_names=tuple(k.lower() for k in reader.next())
    print '1'
    print col_names
    for row in reader:
        yield dict(zip(col_names,row))
    print col_names

if __name__=='__main__':
    main()
工作非常完美,结果是:

('symbol', 'name', 'lastsale', 'marketcap', 'adr tso', 'ipoyear', 'sector', 'industry', 'summary quote', '')
而代码:

# -*- coding: utf-8 -*-
import csv

reader=csv.reader(open('companylist.csv'))
col_names=tuple(k.lower() for k in reader.next())
for row in reader:
    dict(zip(col_names,row))
print col_names
# -*- coding: utf-8 -*-
import csv

def main():
    reader=csv.reader(open('companylist.csv'))
    col_names=tuple(k.lower() for k in reader.next())
    print '1'
    print col_names
    for row in reader:
        yield dict(zip(col_names,row))
    print col_names

if __name__=='__main__':
    main()
一事无成 和代码:

# -*- coding: utf-8 -*-
import csv
def get_rows(csv_file):
    print '0'
    reader=csv.reader(open(csv_file))
    print '1'
    #get the colnum names,lowercased
    col_names=tuple(k.lower() for k in reader.next())
    print '2' 
    for row in reader:
        yield dict(zip(col_names,row))
    print col_names
def main():
    file_name='companylist.csv'

    try:
        if(get_rows(file_name)):
            print "OK"
    except Exception,ex:
        print Exception,":",ex
if __name__=='__main__':
    main()

结果是:
OK

由于您的
get\u行
是一个,它仅在调用其中一个生成器方法时执行(例如,
for…in
表达式内部调用了一个iterable对象的
next()
方法)。因此,重写
main
函数应有助于:

def main():
    file_name='companylist.csv'

    try:
        for row in get_rows(file_name):
            print row
    except:
        print 'OK'

您定义了一个生成器函数
get_rows
,该函数仅在您将其作为迭代器调用时生成一个值。因此,除非在
main
函数中插入
print
语句,否则只需在
get\u rows(file\u name)
行中打印生成器函数(这很好,不会引发异常),而该行不会执行它!因此,许多
print
语句都不会执行

尝试在
get\u行(文件名)
上循环,看看会发生什么,例如这样

for element in get_rows(file_name):
    # do something with element

问题是“屈服”会阻止函数作为函数运行。如果您将其更改为return,您将看到您的异常(我的Python3说reader没有next()函数)和打印

我还没有找到任何关于生成器如何抑制打印语句的文档,但对于以下简单代码似乎确实如此:

def mygen():
    print('1')
    yield 1
关于例外情况,请看以下内容:


正如大家已经指出的,您使用的是生成器,这就是为什么在您第一次调用生成器的
.next
.next\uuuuuuuuu
之前,它不会执行。但是,我将建议一种更好的方法,使您的
get_rows
函数使用小写列名:

import csv

def get_rows(csv_file):
    with open(csv_file) as f:
        return csv.DictReader(f, next(f).lowercase().split(','))    

您甚至没有从异常中获得
“OK”
?另外,不要捕捉这样赤裸裸的异常。您正在丢失不同异常可能包含的所有有价值的信息。是否将其导入到另一个模块?如果这些打印都没有运行,可能意味着python没有读取缩进错误,但您有一个缩进错误。可能是4个空格而不是缩进。这最近发生在我身上,导致我的一个while循环在重新分配值之前结束,所以它一直持续下去。我只需要重新缩进那一行,所有的事情都解决了。我重新缩进了所有的行,但仍然没有得到“OK”,如果你只是从一个常规语句而不是另一个函数中执行它,它是否有效:
get\u rows('companylist.csv')