python:异常处理和网络编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python:异常处理和网络编程相关的知识,希望对你有一定的参考价值。
异常处理:
异常处理要用到try,except,else,finally等
eg1:
dic={
"id":1,
"name":"houning",
"sex":"nv"
}
choice=input(‘请输入您要查看的属性:‘)
try: #异常处理要用到try
print(dic[choice]) #如果代码没有异常,输出这句代码
except Exception as e: #这个Exception能捕捉到所有的异常;也可换成其他类型的异常词,但其他的异常信息(比如KeyError)捕捉都比较单一
print(‘出异常了‘,e) #python3这样用,e打印出来的是异常信息,出了异常的话,会输出e;也可以写其他,但一般都写e
except KeyError as e: #有把握的情况下可以写针对性的异常信息
print(‘输入的key错误‘)
else: #没有出异常的话,走else这里;也可以不写
print(‘ok‘)
finally: #有没有出异常都会走finally;操作数据库或文件等时,需要关闭,要用到finally,在finally后面关闭文件或数据库
print(‘over‘)
常见的一些异常信息:
AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError:输入/输出异常,一般是无法打开文件
ImportError: 无法导入模块或包,一般是路径问题或名称错误
IndentationError:代码没有正确对齐,属于语法错误
IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3]
KeyError:试图访问字典里不存在的键
KeyboardInterrupt:Ctrl+C被按下
NameError:使用一个还未被赋予对象的变量
SyntaxError: 语法错误
TypeError: 传入对象类型与要求的不符
UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量
ValueError: 传入一个调用者不期望的值,即使值的类型是正确的
eg2:
判断是不是小数,用异常仅需几行代码就可判断
def is_float(s):
try:
float(s) #float方法是强制转换为小数类型
except Exception as e:
return False
return True
主动抛出异常:
def is_correct_sql(sql):
sql_start=[‘select‘,‘update‘,‘insert‘,‘delete‘]
for start in sql_start:
if sql.startswith(start):
return True
else:
raise TypeError #用raise主动抛出TypeError这个异常;当sql错误的时候,异常信息是TypeError;
如果在被调用的函数里没有捕捉到这个主动异常的话,那在它上一级调用的函数里面只要出现异常,也可以捕捉到这个主动异常
python网络编程:
即python操作网络,也就是打开一个网站,或者请求一个http接口,使用urllib模块。
urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块。
urllib模块:
from urllib.request import urlopen
from urllib.parse import urlencode,quote,unquote
import urllib,json
url=‘https://www.baidu.com‘
res=urlopen(url).read().decode() #打开这个url,获取数据;.decode()是把字节转化成字符串
#urlopen(url)这个是发送get请求;requests发送get请求是requests.get(‘http://baidu.com’)
new_res=json.loads(res) #把返回的list的json串转成python的list数据类型
url2=‘http://python.nnzhp.cn/reg‘
data={
"username":"hahaha",
"passwd":"123456",
"c_passwd":"123456"
}
param=urlencode(data) #这个可以把data字典里的key value拼接起来,即username=hahaha&passwd=123456&c_passwd=123456
print(urlopen(url2,param.encode()).read().decode()) #这个是发post请求;encode()可以把字符串转成字节类型的
url3=‘http://python.nnzhp.cn/reg:/,.‘
print(quote(url3)) #quote是把特殊字符转化成url编码,比如%3A%3D等;
#unquote是把URL编码变成原来的特殊字符
requests模块
#requests模块就是基于urllib模块开发的,更好用
import requests
url4=‘https://www.baidu.com‘
requests.get(url).text #发get请求;text方式返回的是字符串类型
requests.get(url).json() #返回的是json类型,不同情况用不同的返回类型
url5="http://python.nnzhp.cn/reg?username=hn&passwd=123456"
requests.post(url5).text #发key value入参的post请求;text也可换成json(),意思同上
url6="http://python.nnzhp.cn/set_sites"
d={
"site":"nnzhp",
"url":"http://www.nnzhp.cn"
}
requests.post(url6,json=d).json() #发json串入参的post请求
#访问添加cookie的url
data={"userid":1,"money":999}
cookie={"token":"token12345"}
res=requests.post(url,data,cookies=cookie).json() #括号里写data可以直接拼接;使用cookies参数指定cookie
print(res)
#访问添加header的url,同cookie
head_url=‘http://api.nnzhp.cn/getuser2‘
data={‘userid‘:1}
header={‘Content-Type‘:"application/json"}
res=requests.post(head_url,data,headers=header).json()
#访问上传文件的url
up_url=‘http://python.nnzhp.cn/upload‘
res=requests.post(up_url,files={‘file_name‘:open(‘a.py‘)}).json()
print(res)
以上是关于python:异常处理和网络编程的主要内容,如果未能解决你的问题,请参考以下文章