搜索
查看: 2744|回复: 2

[Python] python函数中使用if判断时,返回值遇到的一点小问题

[复制链接]

7

主题

8

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2018-4-26 08:31:56 | 显示全部楼层 |阅读模式
今天写了个函数处理elife文章中的数据,期间遇到点问题,好长时间才搞定,记录备忘。
程序全文如下:

#!/usr/bin/python

def extract_info_from_elife_line(i):
        '''extract info from every line of elife data'''
        i=i.strip().split('\t')
        if len(i)>1:
                annotation=i[23].split(',')
                fre=i[10]
                if annotation[0]=='"nsSNP' or annotation[0]=='"synSNP':
                        aa_wt=annotation[4][0]
                        aa_mut=annotation[4][-1]
                        key=aa_wt+'>'+aa_mut
                        value=fre
                        return (key,value)


f=open('/home/lideyang/cancer_somatic_mutation/public_data/elife_paper_mutation_info.txt')
f.readline()
aa_sub_fre={}
for i in f:
        if extract_info_from_elife_line(i)!=None:
                (key,value)=extract_info_from_elife_line(i)
                aa_sub_fre[key]=value

for k,v in aa_sub_fre.items():
        print k,'\t',v

遇到的问题:当程序运行到 (key,value)=extract_info_from_elife_line(i) 这一行时,总是提示 TypeError: 'NoneType' object is not iterable 。
原因:函数中存在if判断语句。当条件满足时,正常返回key,value,并通过多重赋值产生元组【 (key,value)=extract_info_from_elife_line(i)】;然而,当函数中if后面的条件不满足时,函数没有返回值,会返回None;而None是不能多重赋值的。这就是错误提示中说“'NoneType' object is not iterable ”的意思;
解决方法:在调用函数并将函数返回值通过多重赋值赋给多个变量之前,加一步判断: if extract_info_from_elife_line(i)!=None: 这样就好了。

不算大的一个问题,却困扰了我一个多小时。而且我脑海中没有“当函数中if后面的条件不满足时,函数没有返回值,会返回None;而None是不能多重赋值的”这个知识点。说明一方面看书不够多不够细(也可能书上确实没有讲到),另一方面实践的作用无法通过看书来替代,多多实践还是重要。




上一篇:推荐书:《编码》
下一篇:linux常用指令
回复

使用道具 举报

11

主题

52

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2018-4-28 13:44:54 | 显示全部楼层
如果你用pycharm之类IDE,if后没有else,在使用返回值时会给出提示,论工具的重要性
回复 支持 反对

使用道具 举报

7

主题

8

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2018-4-29 08:55:48 | 显示全部楼层
dongye 发表于 2018-4-28 13:44
如果你用pycharm之类IDE,if后没有else,在使用返回值时会给出提示,论工具的重要性 ...

学习了。Linux下一直用的vim,Windows下用notepad或python自带的那个东西,没有用过pycharm。以后试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-6-19 23:55 , Processed in 0.043277 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.