美文网首页
Python踩坑记录

Python踩坑记录

作者: yumiii_ | 来源:发表于2019-10-30 14:47 被阅读0次

发现上一篇Python记录写到后面像是我的学习笔记了,还是单开一个记录一下踩坑吧。

1.字典
python3中,使用dict.keys()返回的是<class 'dict_keys'> 这个类型了,可以用list()转换成列表的形式

  1. ValueError: invalid literal for int() with base 10:
>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5

3.pandas读取的dataframe转列表:

pd_data = pd.read_csv(filename)
diseases = pd_data['DiseaseName'].tolist()
symptom = pd_data["symptom"].tolist()
disease_dict = dict(zip(diseases,symptom))

1⃣️df['a'].values.tolist()或者df['a'].tolist()都可,可以不要再傻了吧唧的知道长度之后再去遍历一个一个append到列表里了吗?
2⃣️已知有俩列表,可以用dict(zip())的形式把这转换成字典。

  1. 读取文件的时候,按照":"split,然后取data[1]报数组越界,可以检查一下是不是文件有问题吗??比如说可以打印一下是不是哪里切开之后长度不等于2,直接定位到有问题的那一行

5.三目运算

for i in range(query_length):
    found = process.extractOne(query[i], choices=disease_dict.keys(), score_cutoff=90)
    print(found)
    step1_dise.append(found[0] if found  else None)

我这里的found输出的有两种形式,一种是None,一种是(‘词’,数字)
step1_dise.append(found[0] if found else None) 这种是Python中的三目运算。

6.列表生成式
里面的if要和for一起用啊。。操。。基础不得行

7.关于执行顺序
这是在学习单元测试的时候发现的问题,关于if elif中判断子句的排序问题。下面这个类,是预期在分数>80时返回A,60<分数<80时返回B,60以下返回C,但在执行单元测试时,需要对<0和>100范围内的分数进行一个RaiseError的操作。

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def get_grade(self):
        if self.score >= 80:
            return 'A'
        elif self.score >= 60:
            return 'B'
        elif self.score <0 or self.score >100:
            raise ValueError("score error")
        else:
            return 'C'

单元测试代码如下:

class TestStudent(unittest.TestCase):

    def test_80_to_100(self):
        s1 = Student('Bart', 80)
        s2 = Student('Lisa', 100)
        self.assertEqual(s1.get_grade(), 'A')
        self.assertEqual(s2.get_grade(), 'A')

    def test_60_to_80(self):
        s1 = Student('Bart', 60)
        s2 = Student('Lisa', 79)
        self.assertEqual(s1.get_grade(), 'B')
        self.assertEqual(s2.get_grade(), 'B')

    def test_0_to_60(self):
        s1 = Student('Bart', 0)
        s2 = Student('Lisa', 59)
        self.assertEqual(s1.get_grade(), 'C')
        self.assertEqual(s2.get_grade(), 'C')

    def test_invalid(self):
        s1 = Student('Bart', -1)
        s2 = Student('Lisa', 101)
        with self.assertRaises(ValueError):
            s1.get_grade()
        with self.assertRaises(ValueError):
            s2.get_grade()

if __name__ == '__main__':
    unittest.main()

但始终过不了 test_invalid方法中的s2.get_grade(),其实考虑一下就知道在分数为101的时候走的是分数>80所以返回A的分支,所以RaiseError的操作应该放在分数判断的一开始,即:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def get_grade(self):
        if self.score <0 or self.score >100:
            raise ValueError("score error")
        elif self.score >= 80:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

相关文章

  • Pyppeteer踩坑记录

    Pyppeteer踩坑记录 [toc] 简介   pyperteer是puppeteer的Python实现,相比于...

  • Python踩坑记录

    发现上一篇Python记录写到后面像是我的学习笔记了,还是单开一个记录一下踩坑吧。 1.字典python3中,使用...

  • python 踩坑记录

    最近有个需求是对图片进行批量压缩存储在临时目录中,然后批量上传到oss上 打印dir的值发现,每次打印的文件数量不...

  • Selenium 之 Mac 环境下 Python 安装 se

    作为一个Python初级菜鸟 ,以下是我Mac 环境下使用Python 安装selenium 的踩坑记录。 pip...

  • Python读取大文件的"坑“与内存占用检测

    python读写文件的api都很简单,一不留神就容易踩”坑“。笔者记录一次踩坑历程,并且给了一些总结,希望到大家在...

  • python开发踩坑记录

    1 brine是计算机视觉数据的数据集管理器。可以使用Brine轻松地在Python中安装和加载图像数据集。Bri...

  • 2020-10-19随笔 踩坑0传值

    踩坑:当值传入0时,if条件判断时候会自己转换,记录踩坑。

  • Weex入门踩坑记录

    Weex入门踩坑记录

  • Python笔记

    最近在学习python,记点坑,免得以后又踩~ 哦,对了,我用的mac,所以这里只做mac坑的记录,win...

  • ubuntu14.4+python3.6+pip3+pytorc

    ubuntu14.4+python3.6+pip3+pytorch-0.4.1 踩了无数次坑所以记录下过程 1.p...

网友评论

      本文标题:Python踩坑记录

      本文链接:https://www.haomeiwen.com/subject/ybvovctx.html