首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Python 入门第十七讲】异常处理

TypeError:当操作或函数应用于错误类型的对象(例如将字符串添加到整数)时,将引发此异常。NameError:当在当前作用域中找不到变量或函数名称时,将引发此异常。...AttributeError:当在对象找不到属性或方法时,例如尝试访问类实例的不存在的属性,则会引发此异常。...IOError:当 I/O 操作(如读取或写入文件)由于输入/输出错误而失败时,会引发此异常。ZeroDivisionError:尝试将数字除以零时,会引发此异常。...x = 5y = "hello"z = x + y输出:尝试 catch 块来解决它:代码尝试将整数 (x) 和字符串 (y) 相加,这不是有效的操作,它将引发 x y TypeError 。...def fun(a):if a < 4:b = a/(a-3)print("Value of b = ", b)try:<em>fun</em>(3)<em>fun</em>(5)except ZeroDivisionError:print

28011
您找到你想要的搜索结果了吗?
是的
没有找到

【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析

a, 这样定义是错误的; -- 默认返回值 : C 中, 如果没有标明返回值类型, 默认的返回值不是 void, 是 int 类型; -- void参数 : C 语言中参数是void, 传入参数不会出错..., C++中传入参数会出错, 因此这里我们统一规定, 如果函数没有参数, 就定义为void; . (2) void*简介 void * 作用 :  -- 通用数据类型 : void * 指针可以存放任意类型数据的地址...: 如果本文件中找不到, 连接其它文件找外部变量定义, 如果找到, 将外部变量作用域扩展到本文件中; -- 外部文件找不到 : 报错; 使用效果 : extern 使用的时候, 可以不带数据类型; -...& 与 * 操作 取地址运算符 & : p = &c; -- 表达式解析 : 将 c 的地址赋值给 变量 p, p 是指向 c 变量的指针; -- & 可以使用的情况 : 取地址操作 只能用于内存中的对象...= EOF; n++); for(i = 0; i < SIZE; i++) { printf("array[%d] = %d \n", i, array[i]); } return 0;

3.9K20

从零开始学C++之类与对象:类声明、类作用域、前向声明、this指针、嵌套类、PIMPL 技法 等

两个类需要相互引用头文件形成一个“环形”引用时会出错。这时候需要用到前向声明,前向声明的类不能实例,但可以定义指针或引用。...();     Outer::Inner i;     i.Fun();     Fun();     //LocalClass lc;        Error,局部类只能在定义它的函数体中使用...    return 0; } 七、PIMPL 技法 来看下面的示例: // file y.h #include "x.h" class Y {     void Fun();     X x_; }...3、假设y.cpp 编译成动态库给main.cpp 使用,当X的大小变化,动态库需要重新编译,此时main.cpp 因为有定义对象y ,故也需要 重新编译。...class Y {     Y();     ~Y();     void Fun();     X *px_; }; // file y.cpp #include "x.h" Y::Y() : px

1.4K00

高效备考方法-程序修改题

函数的返回值及其参数:重点 int fun(int x,int y) { if(x>y)return x; else...从两个地方来看,首先return x;中x的类型必须和fun函数中的返回值相同,x是整型。其次c=fun(a,b);中fun函数将一个返回值赋值给了变量c,说明函数返回的值一定是整型。...(2) 函数传递的参数: int fun(int *x,int *y) { if(*x>*y)return *x; else return *y; } main()...比较上面两个例子大家很容易区别传递的是值还是地址,第一个例子调用函数的时候传递的是值,因此在fun函数的形参中x和y仅仅是普通的变量,而第二个例子中调用函数的时候传递的是地址,因此在fun函数的形参中x...fun函数的形参是x和y,它们的类型是整型的指针,那么在fun函数的函数体中使用到x和y的值时一定要区分:x>y比较的是x和y所存变量地址的大小,*x>*y才是比较值的大小。

1K10

Python装饰器和闭包

闭包 python是一种面向对象的编程语言,在Python中一切皆是对象。函数也是对象。变量拥有的属性,函数同样拥有。因此在函数内部创建一个函数的行为是完全合法的。这种函数称为嵌套函数或者内嵌函数。...执行func2过程:print(x,y)---> x +=5---> X=6,y=7--->返回func(x,y),即mysum 装饰器本身就是个函数,将被装饰的类或者函数当做参数传递给装饰器函数。...装饰器本身是函数 返回值也是函数 装饰器是一种特殊的闭包 一个栗子: def foo(fun): # foo函数的参数是个被装饰的函数对象fun def wrap():...;向foo()传递了函数对象bar() f() # 结果 start I am in bar() end bar 加上装饰器: def foo(fun): # foo函数的参数是个函数fun...__name__) return wrap @foo # 增加的内容:称为语法糖;增减程序的可读性,减少代码出错的机会。

36910

重学JS基础-作用域链和闭包

一,作用域和作用域链 1.全局作用域 JS有一个全局对象,window,在全局声明的变量都属于window的属性,未使用声明符声明的属性也是window的属性。...,其第一项为GO, 即scope(fun1):GO --> 2执行函数fun1时,会生成一个属于fun1的函数执行上下文AO,这是scope第一项为这个AO对象, 即scope(fun1):AO(fun1...) --> GO --> 3.执行函数fun1时,在fun1函数体中,由于定义了函数fun2,所以创建fun2的scope属性,直接继承自fun1, 即scope(fun2): AO(fun1) -->...它从第0位开始访问,第一位是函数b的作用域,找不到的话会继续想下寻找,即函数a的作用域, 再找不到,便会继续向下,即在window的作用域中寻找,最后也无法找的变量的话,则会抛出错误。...4.闭包的优缺点 闭包的好处 希望一个变量长期存储在内存中 避免全局变量的污染 私有成员的存在 用于缓存闭包的坏处 容易造成内存泄漏 使用闭包定义对象的私有变量 var Person = (function

56620

虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?

vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的。...由于基类的fun不是虚函数,故p->fun() 调用的是Base::fun()(规则2),而且delete p 还会崩溃,为什么呢?...public: virtual ~B() { cout << "B::~B()" << endl; } }; class D: public B { int i;...= sizeD,参照规则4,pb[1] 按照B的大小去跨越,指向的根本不是一个真正的B对象,当然也不是一个D对象,因为找到的D[1] 虚函数表位置是错的,故调用析构函数出错。.../test: free(): invalid pointer: 0x09d0000c *** ,参照前面讲过的例子。

96820

虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?

vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的。...由于基类的fun不是虚函数,故p->fun() 调用的是Base::fun()(规则2),而且delete p 还会崩溃,为什么呢?...public:     virtual ~B()     {         cout << "B::~B()" << endl;     } }; class D: public B {     int i;...= sizeD,参照规则4,pb[1] 按照B的大小去跨越,指向的根本不是一个真正的B对象,当然也不是一个D对象,因为找到的D[1] 虚函数表位置是错的,故调用析构函数出错。.../test: free(): invalid pointer: 0x09d0000c *** ,参照前面讲过的例子。

91900

c语言内联函数和动态链接库的制作和使用

inline void Foo(int x, int y); // inline 仅与函数声明放在一起 void Foo(int x, int y) { } void Foo(int x, int y...而且当函数多次被调用时,这个时候其实函数内部的一些数据会占用栈空间的,我们使用内联函数就能节约栈空间(就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题...:在函数‘main’中: test.c:(.text+0x5):对‘fun1’未定义的引用 collect2: error: ld returned 1 exit status 说明我们还没有用到我们的动态链接库...ld: 找不到 -lhell collect2: error: ld returned 1 exit status 我们还是要使用"-L."...(0x00007f5805c61000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5805870000) /lib64/ld-linux-x86

1.4K30

Python入门之函数和变量

fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。 可变类型:类似 c++ 的引用传递,如 列表,字典。...如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响 # 可更改(mutable)与不可更改(immutable)对象 def mutable_demo(a, list):...注:多个参数时,确保所有默认参数在必须参数之后,调用时尽量使用关键字方式调用,避免出错 def print_info(name, age=18, sex='女'): "打印人员信息" print...,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。...i_num = 2 # 局部变量 注:Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else

11810

一、c++中经常被面试官面试的小问题总结(本篇偏向基础知识)

代表它将具备以下三个性质:   1.const对象只能调用const成员函数。  ...2.const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误   3.在const函数中调用非const成员函数是语法错误   任何不会修改数据成员的函数都应该声明为...通过非static函数的方式,我们可以定义一个普通的函数, 让这个普通函数调用static函数,让后在把这个普通函数在头文件中声明 举例:利用可在本文件调用的属性,另加一个函数funfun调用该static...函数;其他文件调用fun即可。...c1的偏移量为0,i的偏移量为4,c1与i之间便需要3个字节填充。 c2的偏移量为8,那么结果就是1+3+4+1=9,由于这里最宽的字节 为int,4个字节。补全之后答案为12.

90830
领券