with_traceback(tb):此方法通常用于异常处理中。此方法将tb设置为该异常的新回溯并返回异常对象。...当属性引用或分配失败(例如,引用了不存在的属性)时,将引发AttributeError。...输入名称:Traceback(最近一次通话): 文件“ exceptions_EOFError.py”,第13行, 数据= raw_input('输入名称:') EOFError:读取行时出现...() g.close() 输出: Yielding 0 0 Exiting early 异常ImportError 当import语句无法加载模块或from…import中的“ from list”具有无法找到的名称时...异常ReferenceError 当在垃圾回收之后使用弱引用代理访问引用对象的属性时,引发ReferenceError。
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 AttributeError #试图访问一个对象没有的树形...,比如foo.x,但是foo没有属性x IOError #输入/输出异常;基本上是无法打开文件 ImportError #无法引入模块或包;基本上是路径问题或名称错误...(e) else: print('') #当try语句中的代码没有异常,就执行else中的代码 # try...finally语句 try: abc() except Exception...出来 用sys模块回溯最后的异常 当发生异常时Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这是可以使用sys模块回溯最近一次异常。...其中,type表示异常的类型,value/message表示异常的信息或者参数,而traceback则包含调用栈信息的对象。
AttributeError:当试图使用一个对象没有的属性或方法时 In [8]: dic = {'key1':'var1', ...: 'key2':'var2'} In [9...> lis[6] IndexError: list index out of range 对于列表lis一共5个元素,若我们试图访问第7个元素也就是lis[6]时会出现 列表超出了范围的提示...断言语句失败 AttributeError 对象没有这个属性 EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败...OSError 操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询的基类 IndexError 序列中没有此索引(index...) KeyError 映射中没有这个键 MemoryError 内存溢出错误(对于Python 解释器不是致命的) NameError 未声明/初始化对象 (没有属性) UnboundLocalError
好的,然后我们需要继续向上看,可以看到导致异常的行。在这个例子中我们看到的是调用 greet 方法的具体代码。 它的上一行提供了代码所在文件的路径,以及代码文件的行号以及它所在的模块。...(Pycharm 中通过点击文件链接可以定位到具体位置) 在这个例子中,因为我们的代码没有使用任何其他 Python 模块,所以我们在这里看到module>,它表示所处位置是在执行的文件。...AttributeError 当你访问一个对象的属性,但是这个属性并没有在这个对象定义的时候,就会引发 AttributeError。...' object has no attribute 'b' AttributeError 的错误消息行告诉我们特定对象类型(在本例中为 int)没有访问的属性, 在这个例子中属性为 b。...: 'tuple' object has no attribute 'append' 这里尝试给 a_list 对象进行 append 操作但是引发了异常, 这里的错误信息说,tuple 对象没有
反射 反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性、方法、导入模块,是一种基于字符串的事件驱动。...而且它是通过调用getattr并捕获AttributeError异常来判断的。...如果用hasattr呢,这个函数就不会在判断的时候调用一次了。...,hasattr并没有调用test函数,而且getattr获取到的是函数对象,也没有调用它,通过我们主动执行func()才执行了a.test()函数,这样相比于exec和eval就灵活了许多。...是一个py脚本-config.py,内部有一个变量KEYWORD,我们要通过其他py模块来导入这个文件,使用__import__我们就可以把它导入为一个对象,然后使用对象的方式去调用,而不是一直用exec
print(Order(joe, long_cart, LargeOrderPromo())) # 享元:享元是可共享的对象,可以同时在多个上下文中使用...inspect 模块提供了一些有用的函数帮助获取对象的信息,例如模块、类、方法、函数、回溯、帧对象以及代码对象。...例如它可以帮助你检查类的内容,获取某个方法的源代码,取得并格式化某个函数的参数列表,或者获取你需要显示的回溯的详细信息。...该模块提供了4种主要的功能: 类型检查 获取源代码 检查类与函数 检查解释器的调用堆栈 判断是否为类 def isclass(object): """Return true if the object...else: mro = () results = [] processed = set() names = dir(object) # 使用dir方法拿到全部的属性
Python中用关键词None表征null对象,它并不是0,它是Python中的第一类对象。 None是什么 对于函数,如果在函数体中没有return语句,会默认返回None。...使用None 通常,None作为返回值或者某些参数的值,比如在正则表达式中,如果没有匹配对象,则返回None。...在第2行条件判断中,并没有显式地写some_result is None,这是因为None本身就是假,与之类似,下面的这些对象也是假: 空列表 空字典 空元组 空字符串 0 False 在Python中...第3行再次调用的时候,同样也没有给starter_list提供值,它依然应该是原有列表——注意观察定义函数时的参数。但是,返回值是在上一次调用返回结果中增加了新元素。...(None, my_list) ['a', 'b', 'c', 'd', 'e', None] 在上面的示例中,DontAppend类对象并没有追加到列表中,第12行,则实现了将None作为对象追加到列表中
在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。...但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。...types: list() > str() 返回可迭代对象,而不是列表 在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。...由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。 此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。...函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。
,因为print 在 Python 2 中是一个声明,而不是一个函数调用。...(或者是实现上改变了),值得一提的是:在 Python 2.7.5 中函数和方法你都可以使用,next()函数在 Python 3 中一直保留着(调用.next()抛出属性异常)。...types: list() > str() ---- 12 通过input()解析用户的输入 幸运的是,在 Python 3 中已经解决了把用户的输入存储为一个 str对象的问题。...,而不是列表 如果在 xrange 章节看到的,现在在 Python 3 中一些方法和函数返回迭代对象 — 代替 Python 2 中的列表 因为我们通常那些遍历只有一次,我认为这个改变对节约内存很有意义...尽管如此,它也是可能的,相对于生成器 —- 如需要遍历多次。它是不那么高效的。 而对于那些情况下,我们真正需要的是列表对象,我们可以通过list()函数简单的把迭代对象转换成一个列表。
_ElementTree object at 0x00000283496436C8> 上述代码中,先是随机构造了部分html源码,并将其放入lxml的etree对象中。...获取所有li标签下的数据,并提取其内容: list = html.xpath('//li') for i in list: print("数据:" + i.text) 结果: 数据:2112001...= html.xpath('//li[@class="blank"]') for l in blank_li_list: print("数据:" + l.text) 结果: 数据:2112003...//span[@class="chapter_name"]/text()')[0] print(title,href) 集合ul_li_list中存储着所有的li标签,从第五个li开始才是第一章...(前面4行是最新章节),因此我们需要从第5行开始,然后通过xpath提取出li中的含有的章节标题和章节链接。
一 反射相关 1 hasattr 根据字符串的形式 , 去判断对象中是否有成员 hasattr(object,name) 判断对象object是否包含名为name的特性(hasattr是通过调用...'18' >>> 3 setattr 根据字符串的形式 , 动态的设置一个成员(在内存中) (三个参数, 第一个参数是要设置的变量, 第三个变量是要设置的值) 给对象的属性赋值,若属性不存在,...(p.start()) # print(p.end()) print(p.start) print(p.end) 6 vars 7 super 在多继承中,可以保证顶层父类只被调用一次...print(eval('1+2+3+4')) 还可以用来操作文件,将文件里面的内容转化为字典,方便调用 2 exec exec()将自字符串类型的代码执行 print(exec("1+2+... 帮助相关 10 help 调用相关 11 callable 检测一个对象能否被调用 查看内置属性和方法 12 dir dir(list) dir(a) dir(123
二 模块 在Python中,一个.py文件就称之为一个模块(Module),提高了代码的可维护性,可以避免函数名和变量名冲突(尽量不与内置函数冲突)。...还可以判断是都某些类型中的一种 >>> isinstance([1, 2, 3], (list, tuple)) True 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的...Python内置的@property装饰器就是负责把一个方法变成属性调用的,只定义getter方法,不定义setter方法就是一个只读属性。...,or循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。...最后,还有一个__delitem__()方法,用于删除某个元素 __getattr__方法可以动态返回属性或函数,当调用类的方法或属性时,若不存在,才会在__getattr__中查找。
> ----> 1 dict_['3'] KeyError: '3' 5、ValueError ValueError 为值错误,当用户传入一个调用者不期望的值时会引发,即使这个值的类型是正确的,比如想获取一个列表中某个不存在值的索引...> ----> 1 n.index(4) ValueError: 4 is not in list 6、AttributeError AttributeError 是属性错误,当用户试图访问一个对象不存在的属性时会引发...,比如列表有 index 方法,而字典却没有,所以对一个字典对象调用该方法就会引发该异常 In [25]: dict_ = {'1':'yi','2':'er'} In [26]: dict_.index...为打开文件错误,当用户试图以读取方式打开一个不存在的文件时引发 In [29]: fb = open('..../list' 9、StopIteration StopIteration 为迭代器错误,当访问至迭代器最后一个值时仍然继续访问,就会引发这种异常,提醒用户迭代器中已经没有值可供访问了 In [30]:
base_page.py 文件之间存在相互调用关系。...解决方案 把循环调用的包引入信息放在函数内。只要一方的引用信息放在函数里即可,不必两边都放。 我只在 exception.py 文件里改了,base_page.py 保持不变。...return magic() 为什么返回函数调用会报这个错呢? 因为调用magic()函数的时候,没有传参进去,但是magic()里面引用了入参,这时args没有值,自然就取不到args0了。..._driver 属性,从而调用 find_elements。...遇到问题尝试解决,踩过的坑印象深刻。 实在没有头绪再参考思寒的解法,那时会有一种豁然开朗的感觉。 目前就踩到这些坑,如有遗漏,欢迎补充~
) max:返回可迭代对象中的元素中的最大值或者所有参数的最大值 >>> max(1,2,3) # 传入3个参数 取3个中较大者 3 >>> max('1234') # 传入1个可迭代对象,取其最大元素值...'4' min:返回可迭代对象中的元素中的最小值或者所有参数的最小值 >>> min(1,2,3) # 传入3个参数 取3个中较小者 1 >>> min('1234') # 传入1个可迭代对象,取其最小元素值...| *************************** dir:返回对象或者当前作用域内的属性列表 >>> import math >>> math module 'math' (built-in...print('instances are callable now.') >>> callable(B) #类B是可调用对象 True >>> b = B() #调用类...open:使用指定的模式和编码打开文件,返回文件读写对象 # t为文本读写,b为二进制读写 >>> a = open('test.txt','rt') >>> a.read() 'some text'
其目的是在不对现有函数进行修改的情况下,实现额外的功能。 在 Python 中,装饰器属于纯粹的“语法糖”,不使用也没关系,但是使用的话能够大大简化代码,使代码更加简洁易读。...base_page.py 文件之间存在相互调用关系。...解决方案 把循环调用的包引入信息放在函数内。只要一方的引用信息放在函数里即可,不必两边都放。 我只在 exception.py 文件里改了,base_page.py 保持不变。...因为调用 magic() 函数的时候,没有传参进去,但是 magic() 里面引用了入参,这时 args 没有值,自然就取不到 args[0] 了。 解决方案 去掉括弧就好了。..._driver 属性,从而调用 find_elements。
> ----> 1 dict_['3'] KeyError: '3' 5、ValueError ValueError为值错误,当用户传入一个调用者不期望的值时会引发,即使这个值的类型是正确的,比如想获取一个列表中某个不存在值的索引...> ----> 1 n.index(4) ValueError: 4 is not in list 6、AttributeError AttributeError是属性错误,当用户试图访问一个对象不存在的属性时会引发...,比如列表有index方法,而字典却没有,所以对一个字典对象调用该方法就会引发该异常。...> ----> 1 print(list_) NameError: name 'list_' is not defined 8、FileNotFoundError FileNotFoundError为打开文件错误.../list' 9、StopIteration StopIteration为迭代器错误,当访问至迭代器最后一个值时仍然继续访问,就会引发这种异常,提醒用户迭代器中已经没有值可供访问了。
现在第二个object也没有指向它的东西,所以也将被垃圾收集丢掉。 为了能够验证所有这些,我们可以使用内置函数id。id 获得对象在内存中的确切位置,表示为数字。...dir and vars: 一切都是字典 你有没有想过Python如何存储对象,它们的变量及方法?我们知道所有对象都有自己的属性和方法,但是Python究竟如何跟踪它们呢?...>>> x = list() >>> x.foo = 5 AttributeError: 'list' object has no attribute 'foo' 不,list也不行。...property @property是当您要为对象中的属性定义获取器(getter)和设置器(setter)时要使用的修饰符。...译者注:描述符是属性控制的工具,它的内容很多,感兴趣的可以去官方教程、Effective-python90的第46小节、流畅的Python的第20章以及知乎上很多描述符的文章深入了解。
发现程序运行到if语句后就跳出循环了,明明还有两个没有参与循环呢 continue语句在循环开始之前要测试一次循环条件如果把上面的代码中的break替换成continue的话,那么会变成 ?...(最近一次调用last): >>> "{a} like {b}.{0}"。...AttributeError 特性应用或赋值时引发(试图访问一个对象没有的属性) IOError 试图打开不存在的文件或者无全新的文件等操作时,就会引发(...如果没有赋值覆盖,那么引用的是类对象的count属性。 有点绕对吧 看一下图就很好理解了 ?...注意;类中定义的属性是静态变量,也就是相当于C语言中加上static声明的变量,类的属性食欲类对象进行绑定,并不会以来任何他的实例对象。
领取专属 10元无门槛券
手把手带您无忧上云