• [技术干货] python中自定义异常处理
     1.自定义异常类型用户自定义异常类型,只要该类继承了Exception类即可,至于类的主题内容用户自定义class TooLongExceptin(Exception):     "this is user's Exception for check the length of name "     def __init__(self,leng):         self.leng = leng     def __str__(self):         print("姓名长度是"+str(self.leng)+",超过长度了")2.用raise抛出异常:系统的自带的异常只要触发会自动抛出,比如NameError,但我们自定义的异常需要自己判断什么时候抛出。raise 唯一的一个参数,它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。大多数的异常的名字都以"Error"结尾,所以实际命名时尽量遵循标准的异常命名规则。#1.用户自定义异常类型 class TooLongExceptin(Exception):     "this is user's Exception for check the length of name "     def __init__(self,leng):         self.leng = leng     def __str__(self):         print("姓名长度是"+str(self.leng)+",超过长度了")   #2.raise抛出异常 def name_Test():         name = input("enter your name:")         if len(name)>4:             raise TooLongExceptin(len(name))  #抛出异常很简单,使用raise即可         else :             print(name)#正常程序分支3.运行效果:
  • [技术干货] 自动驾驶算法在MDC上移植,要考虑到哪些点?
    算法在移植到MDC时,要考虑哪些点?具体来说。拆解为多个单独的点:一、通信。如果原有通信过程是基于ROS的,现在的通信过程建议通过autosar来完成。MDC提供了完善的工具支持,基于Adaptive Autosar的通信方案,可靠,低时延。二、AI模型转换。由于MDC是使用了自己独有的硬件设备,公开AI模型没法直接运行,需要经过转换后方可运行。对AI模型的支持,本质上是对其算子的支持。MDC提供了算子支持列表。对于不支持的算子,可行的做法是,在训练阶段,即用可支持的算子替换。并联系MDC接口人,开发所不支持的算子。三、C/C++代码。代码中是否有和硬件强相关的部分?比如使用了x86的SIMD指令集?如果有,建议将这部分用ARM提供的NEON代替。比如使用ARM官方提供的compute library。 链接 https://github.com/ARM-software/ComputeLibrary四、PYTHON代码。MDC提供,python2.7和python3.5的支持。五、第三方依赖库。由于arm和x86支持的平台,二进制格式不同,在x86上运行的库,在ARM上要重新编译,或寻找代码作者提供的ARM版本。算法在MDC上如何调试?一、C/C++代码。熟悉GDB的同学,在MDC上可以同样使用GDB啦,通过包管理工具安装即可。通过MDS也可以直接调试。最后的最后,直接打印日志也是一种方式。二、对AI模型的调试。由于AI模型运行在专有硬件上,需要使用专有工具进行调试。MDC提供了profiling工具,用以检查模型运行过程中的问题。最直接的方式还是看输出结果。三、对通信过程的调试。MDC提供了rtfevent系列工具,对标ros 系列工具,开箱即用。具体参考《产品文档》中的《在线维测工具》章节。四、对算法效果的调试。算法不止AI,还包括C/C++/python代码。MDC提供了mviz可视化工具,对标rviz,可显示2D/3D检测结果,行车轨迹,地图等元素。欢迎来用~
  • [技术干货] 使用Python实现音频双通道分离
    某些音频是双方对话,有可能需要对音频作通道的分离。示例代码如下:12345678910111213141516171819202122232425262728293031323334353637#!/usr/bin/env python# -*- coding: utf-8 -*-"""音频双通道分离"""import sysimport numpy as npfrom scipy.io import wavfilefrom converter import mp3_to_wav  def split_channel(wav_path, left_wav_path, right_wav_path): """ 通道分离 :param wav_path: wav音频的路径 :param left_wav_path: 左声道的wav音频路径 :param right_wav_path: 右声道的wav音频路径 :return None: """ try:  sample_rate, wav_data = wavfile.read(wav_path)  left = []  right = []  for item in wav_data:   left.append(item[0])   right.append(item[1])  wavfile.write(left_wav_path, sample_rate, np.array(left))  wavfile.write(right_wav_path, sample_rate, np.array(right)) except IOError as e:  print('error is %s' % str(e)) except:  print('other error', sys.exc_info())  if __name__ == '__main__': mp3_to_wav('input/test.mp3', 'tmp/tmp.wav') split_channel('tmp/tmp.wav', 'output/left.wav', 'output/right.wav')其中调用了一个自定义的库,converter.py 加入了代码:123456789101112from pydub import AudioSegment  def mp3_to_wav(source, destin): """ mp3 转 wav :param source: :param destin: :return None: """ data = AudioSegment.from_mp3(source) data.export(destin, format='wav')本代码示例可以生成两个通道分离后的 wav 文件。注意:如果源文件的格式是 wav 文件,可以省掉转换格式的过程。
  • [技术干货] python 通过PYMYSQL使用MYSQL数据库方法
    什么是MYSQL数据库???MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。什么是PYMYSQL???PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。PyMySQL安装1pip install pymysqlPyMySQL使用连接数据库1、首先导入PyMySQL模块2、连接数据库(通过connect())3、创建一个数据库对象 (通过cursor())4、进行对数据库做增删改查12345678910# coding:utf-8import pymysql# 连接数据库count = pymysql.connect(      host = 'xx.xxx.xxx.xx', # 数据库地址      port = 3306,  # 数据库端口号      user='xxxx',  # 数据库账号      password='XXXX',  # 数据库密码      db = 'test_sll')  # 数据库表名# 创建数据库对象db = count.cursor()查找数据db.fetchone()获取一条数据db.fetchall()获取全部数据123456789101112131415161718192021# coding:utf-8import pymysql# 连接数据库count = pymysql.connect(      host = 'xx.xxx.xxx.xx', # 数据库地址      port = 3306,  # 数据库端口号      user='xxxx',  # 数据库账号      password='xxxx',  # 数据库密码      db = 'test_sll')  # 数据库名称# 创建数据库对象db = count.cursor()# 写入SQL语句sql = "select * from students "# 执行sql命令db.execute(sql)# 获取一个查询# restul = db.fetchone()# 获取全部的查询内容restul = db.fetchall()print(restul)db.close()修改数据commit() 执行完SQL后需要提交保存内容123456789101112131415161718# coding:utf-8import pymysql# 连接数据库count = pymysql.connect(      host = 'xx.xxx.xxx.xx', # 数据库地址      port = 3306,  # 数据库端口号      user='xxx',  # 数据库账号      password='xxx',  # 数据库密码      db = 'test_sll')  # 数据库表名# 创建数据库对象db = count.cursor()# 写入SQL语句sql = "update students set age = '12' WHERE id=1"# 执行sql命令db.execute(sql)# 保存操作count.commit()db.close()删除数据123456789101112131415161718# coding:utf-8import pymysql# 连接数据库count = pymysql.connect(      host = 'xx.xxx.xxx.xx', # 数据库地址      port = 3306,  # 数据库端口号      user='xxxx',  # 数据库账号      password='xxx',  # 数据库密码      db = 'test_sll')  # 数据库表名# 创建数据库对象db = count.cursor()# 写入SQL语句sql = "delete from students where age = 12"# 执行sql命令db.execute(sql)# 保存提交count.commit()db.close()新增数据新增数据这里涉及到一个事务问题,事物机制可以保证数据的一致性,比如插入一个数据,不会存在插入一半的情况,要么全部插入,要么都不插入123456789101112131415161718# coding:utf-8import pymysql# 连接数据库count = pymysql.connect(      host = 'xx.xxx.xxx.xx', # 数据库地址      port = 3306,  # 数据库端口号      user='xxxx',  # 数据库账号      password='xxx',  # 数据库密码      db = 'test_sll')  # 数据库表名# 创建数据库对象db = count.cursor()# 写入SQL语句sql = "insert INTO students(id,name,age)VALUES (2,'安静','26')"# 执行sql命令db.execute(sql)# 保存提交count.commit()db.close()到这可以发现除了查询不需要保存,其他操作都要提交保存,并且还会发现删除,修改,新增,只是修改了SQL,其他的没什么变化创建表创建表首先我们先定义下表内容的字段字段名含义类型ididvarcharname姓名varcharage年龄int12345678910111213141516# coding:utf-8import pymysql# 连接数据库count = pymysql.connect(      host = 'xx.xxx.xxx.xx', # 数据库地址      port = 3306,  # 数据库端口号      user='xxxx',  # 数据库账号      password='xxx',  # 数据库密码      db = 'test_sll')  # 数据库表名# 创建数据库对象db = count.cursor()# 写入SQL语句sql = 'CREATE TABLE students (id VARCHAR(255) ,name VARCHAR(255) ,age INT)'# 执行sql命令db.execute(sql)db.close()感觉有用给个赞行不行????
  • [技术干货] 加速ubuntu/python的更新、下载速度
    推荐使用华为提供的下载加速资源https://mirrors.huaweicloud.com/在这里,提供了包括ubuntu/python和其他开源软件的镜像仓,助你开发速度更快一点~将几个配置加速方式贴在这里以下内容摘自上面的网站。ubuntu 加速1、备份配置文件:sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak2、修改sources.list文件,将http://archive.ubuntu.com和http://security.ubuntu.com替换成http://repo.huaweicloud.com,可以参考如下命令:sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.listsudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list3、执行apt-get update更新索引python加速Pip的配置文件为用户根目录下的:~/.pip/pip.conf(Windows路径为:C:\Users\<UserName>\pip\pip.ini), 您可以配置如下内容:[global]index-url = https://repo.huaweicloud.com/repository/pypi/simpletrusted-host = repo.huaweicloud.comtimeout = 120
  • [技术干货] RDS for MySQL在启用了SSL验证连接功能后,导致代码(php/java/python)等连接数据库失败解决方法
    问题描述用户开启了SSL验证连接功能,使用代码执行SQL连接数据库出现如下报错:故障分析用户开启了SSL连接功能,只能使用SSL连接方式,不能使用普通连接方式。解决方案开启SSL验证连接功能,使用SSL连接方式连接数据库,请参考SSL连接方式。关闭SSL验证连接功能,使用普通连接方式连接数据库,请参考普通连接方式。
  • [问题求助] 【2280产品】【python openCV】安装完openCV,图片操作正常,但VideoCapture拉RTSP流y
    【功能模块】python 的openCV功能异常【操作步骤&问题现象】1、正常安装python3.7的openCV后,可以实现图片读取、resize等功能;2、使用VideoCapture拉RTSP流异常,未报错,但是无法获取流的宽高,无法读取图片;3、在X86上运行正常cap = cv2.VideoCapture("rtsp://admin:admin@192.168.2.64:554//Streaming/Channels/1")ret,frame = cap.read()while ret:    ret,frame = cap.read()    cv2.imwrite(str(i)+".jpg",frame)print("error:",)cap.release()【截图信息】VideoCapture未报错,但是read(),返回false【日志信息】(可选,上传日志内容或者附件)
  • [赋能学习] python连接redis集群案例
    本案例使用python版本为python3.61、安装依赖注意依赖版本必须为如下版本先安装redis-py  2.10.6 版本 下载链接:   https://github.com/andymccurdy/redis-py/archive/2.10.6.tar.gz再安装 redis-py-cluster  1.3.5版本 下载链接:  https://files.pythonhosted.org/packages/f1/dd/4bb27bb3e3d03a01b0afd4a4ba13a4677b0f2d6552ff2841ac56591bfb29/redis-py-cluster-1.3.5.tar.gz下载后,上传到linux环境解压缩后,进入解压缩后目录,执行 python3 setup.py install2、测试验证脚本参考自 https://blog.csdn.net/shykevin/article/details/90509414如下代码连接的是  未开启安全模式的 FusionInsight 集群中的 Redis#!/usr/bin/env python3 from rediscluster import StrictRedisCluste class RedisCluster(object):  # 连接redis集群     def __init__(self, conn_list):         self.conn_list = conn_list  # 连接列表     def connect(self):         """         连接redis集群         :return: object         """         try:             redisconn = StrictRedisCluster(startup_nodes=self.conn_list)             return redisconn         except Exception as e:             print(e)             print("错误,连接redis 集群失败")             return False redis_basis_conn = [{'host': '10.244.230.10', 'port': 22400},                     {'host': '10.244.230.207', 'port': 22400},                     {'host': '10.244.230.58', 'port': 22400}] res = RedisCluster(redis_basis_conn).connect() if not res:     print("连接redis集群失败") else:     print("连接redis集群成功") redis_conn = RedisCluster(redis_basis_conn).connect()  # redis连接对象 redis_conn.set('name', 'admin')  # 插入一个值 print("name is: ", redis_conn.get('name'))  # 查询值
  • [开发应用] GaussDB 200 python导出数据库表数据
    GaussDB 200 6.5.1版本的集群中,通过使用Python第三方库psycopg2连接集群如何导出数据库中的表数据?
  • [云享读书会] python每天学习一点,每天进步一点
    第一天打开,python学习,加油
  • [技术干货] Python实现FTP文件定时自动下载的步骤
    一、需求:  某数据公司每日15:00~17:00之间,在其FTP发布当日数据供下载,我方需及时下载当日数据至指定本地目录。二、分析:  1、需实现FTP登陆、查询、下载功能;  解答:使用内置的ftplib模块中FTP类;  2、需判断文件是否下载;  解答:使用os模块中path.exists方法;  3、需判断在指定时间段内才执行下载任务;  解答:使用内置的time模块抓取当前时间,并与指定时间做比较;  4、需考虑日期切换问题;  解答:使用内置的time模块抓取当前日期,并与变量中的日期做比较。三、代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384#!/usr/bin/env python# _*_ coding:utf-8 _*_ '''@Time  : 2019-11-11 13:30@Author : Peanut_C@FileName: ftp_auto_download.py'''  import timefrom ftplib import FTPimport os  remote_path = "/xxx/yy/z/" # 远端目录begin_time = 1500 # 任务开始时间end_time = 1700 # 任务结束时间  today = time.strftime("%Y%m%d") # 当天日期today_file = today + 'test.txt' # 得到当天日期的目标文件名remote_file = remote_path + today_file # 远端文件名local_file = '\\\\local\\' + today + '\\' + today_file # 本地文件名log_file = 'C:\\\\log\\ftp_log.txt'  def ftp_connect():  """用于FTP连接"""  ftp_server = 'w.x.y.z' # ftp站点对应的IP地址  username = 'ftpuser' # 用户名  password = 'ftppass' # 密码  ftp = FTP()  ftp.set_debuglevel(0) # 较高的级别方便排查问题  ftp.connect(ftp_server, 21)  ftp.login(username, password)  return ftp def remote_file_exists():  """用于FTP站点目标文件存在检测"""  ftp = ftp_connect()  ftp.cwd(remote_path) # 进入目标目录  remote_file_names = ftp.nlst() # 获取文件列表  ftp.quit()  if today_file in remote_file_names:    return True  else:    return False def download_file():  """用于目标文件下载"""  ftp = ftp_connect()  bufsize = 1024  fp = open(local_file, 'wb')  ftp.set_debuglevel(0) # 较高的级别方便排查问题  ftp.retrbinary('RETR ' + remote_file, fp.write, bufsize)  fp.close()  ftp.quit()  while True:  if int(time.strftime("%H%M")) in range(begin_time, end_time): # 判断是否在执行时间范围    if int(time.strftime("%Y%m%d")) - int(today) == 0: # 判断是否跨日期      while not os.path.exists(local_file): # 判断本地是否已有文件        if remote_file_exists(): # 判断远端是否已有文件          download_file()          with open(log_file, 'a') as f:            f.write('\n' + time.strftime("%Y/%m/%d %H:%M:%S") + " 今日文件已下载!")          time.sleep(60) # 下载完毕静默1分钟        else:          time.sleep(180)          break # 注意,此处跳出循环重新判断日期,避免周末或当天没文件时陷入内层循环      else:        time.sleep(180)    else:      """如果跨日期,则根据当前日期,更新各文件日期"""      today = time.strftime("%Y%m%d") # 当天日期      today_file = today + 'test.txt' # 得到当天日期的目标文件名      remote_file = remote_path + today_file # 远端文件名      local_file = '\\\\local\\' + today + '\\' + today_file # 本地文件名      with open(log_file, 'a') as f:        f.write('\n' + time.strftime("%Y/%m/%d %H:%M:%S") + " 任务启动, 文件日期已更新。")  else:    time.sleep(1800)四、运行情况  保存为pyw文件,任务在后台持续运行,不需要计划任务,省心省力。  不用下载标记,一则较为简洁,二则本地文件如果被人误删或移动可自动重新下载。  日志中,每天仅写入任务启动和文件已下载标志,并记录对应时间,如有需要可再添加。  希望能帮到有需要的朋友。  多多指教!
  • [技术干货] python 基于opencv实现高斯平滑
    假设一个列数为W,行数为H的高斯卷计算子gaussKernel,其中W,H均为奇数,描点位置在((H-1)/2 ,(W-1)/2),构建高斯卷积核的步骤如下1.计算高斯矩阵2.计算高斯矩阵的和3.高斯矩阵除以其本身的和,也就是归一化下面利用Python来实现构建高斯卷积算子12345678910def getGaussKernel(sigma, H, W):  r, c = np.mgrid[0:H:1, 0:W:1]  r -= (H - 1) / 2  c -= (W - 1) / 2  gaussMatrix = np.exp(-0.5 * (np.power(r) + np.power(c)) / math.pow(sigma, 2))  # 计算高斯矩阵的和  sunGM = np.sum(gaussMatrix)  # 归一化  gaussKernel = gaussMatrix / sunGM  return gaussKernel高斯卷积核可以分离成一维水平方向上的高斯核和一维垂直方向上的高斯核,在OpenCV中给出了构建一维垂直方向上的高斯卷积核的函数:Mat getGaussianKernel(int ksize, double sigma, in ktype = CV/_64F)参数释意ksize一维垂直方向上的高斯核行数,正奇数sigma标准差ktype返回值的数据类型为CV_32F或CV_64F,默认是CV_64F下面通过Python代码来具体的实现图像的高斯平滑,我们首先会对图像水平方向进行卷积,然后再对垂直方向进行卷积,其中sigma代表高斯卷积核的标准差1234567891011121314151617181920212223def gaussBlur(image,sigma,H,W,_boundary = 'fill', _fillvalue = 0):  #水平方向上的高斯卷积核  gaussKenrnel_x = cv2.getGaussianKernel(sigma,W,cv2.CV_64F)  #进行转置  gaussKenrnel_x = np.transpose(gaussKenrnel_x)  #图像矩阵与水平高斯核卷积  gaussBlur_x = signal.convolve2d(image,gaussKenrnel_x,mode='same',boundary=_boundary,fillvalue=_fillvalue)  #构建垂直方向上的卷积核  gaussKenrnel_y = cv2.getGaussianKernel(sigma,H,cv2.CV_64F)  #图像与垂直方向上的高斯核卷积核  gaussBlur_xy = signal.convolve2d(gaussBlur_x,gaussKenrnel_y,mode='same',boundary= _boundary,fillvalue=_fillvalue)  return gaussBlur_xyif __name__ == "__main__":  image = cv2.imread("../images/timg.jpg", cv2.IMREAD_GRAYSCALE)  cv2.imshow("image",image)  #高斯平滑  blurImage = gaussBlur(image, 5, 400, 400, 'symm')  #对bIurImage进行灰度级显示  blurImage = np.round(blurImage)  blurImage = blurImage.astype(np.uint8)  cv2.imshow("GaussBlur", blurImage)  cv2.waitKey(0)  cv2.destroyAllWindows()运行截图:
  • [技术干货] python 利用jieba.analyse进行 关键词提取
    1、简单应用代码如下:1234567891011121314#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : jieba.analyse.py# @Author: 赵路仓# @Date : 2020/3/14# @Desc : 提取关键字# @Contact : 398333404@qq.com import jieba.analyse  text='安全、防止水合物和段塞生成的重要措施之一。因此,针对未来还上油田开发技术,我们预先开展了水深1500米管道式油气水分离器的概念设计。通过该研究,提出适合海洋环境的体积小、重量轻、分离效率高、便于操作和维护的新型油气水三相分离器,使其成为海洋深水油气田开'Key=jieba.analyse.extract_tags(text,topK=3)print(Key)2、含参使用1keywords = jieba.analyse.extract_tags(content, topK=5, withWeight=True, allowPOS=()) 第一个参数:待提取关键词的文本第二个参数:返回关键词的数量,重要性从高到低排序第三个参数:是否同时返回每个关键词的权重第四个参数:词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词代码如下:12345678910111213141516171819#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : jieba.analyse.py# @Author: 赵路仓# @Date : 2020/3/14# @Desc : 提取关键字# @Contact : 398333404@qq.com import jieba.analyse  # 字符串前面加u表示使用unicode编码content = u'安全、防止水合物和段塞生成的重要措施之一。因此,针对未来还上油田开发技术,我们预先开展了水深1500米管道式油气水分离器的概念设计。通过该研究,提出适合海洋环境的体积小、重量轻、分离效率高、便于操作和维护的新型油气水三相分离器,使其成为海洋深水油气田开' keywords = jieba.analyse.extract_tags(content, topK=5, withWeight=True, allowPOS=())# 访问提取结果for item in keywords:  # 分别为关键词和相应的权重  print(item[0], item[1])
  • [技术干货] python中类与对象之间的关系详解
    在搜索平台上关于类以及对象都已经被霸屏了,主要的问题无非就是两个,一个是理解二者,另一个就是理解二者之间的使用关系,对于小编来说,两者统一跟大家讲清,相信也很难被大家消化,这不,给大家想出来比较好理解的方式,用最简单的话,快速交大家上手,可别不信,简单易懂内容如下。二者关系:女生口红是一种类,但是mac、完美日记是口红里的个体,被称作是对象。这就是二者之间的关系,有人理解成包含情况也可以。定义类/对象:1234class 类名(父类):class Human(object): passman = Human()实例用法:123456789class A(object): name = "类变量" @classmethod def classfunc(cls):   print("类方法") def __init__(self, name):   self.name = name def func(self):   print("实例方法")我们可以从上述的内容里看出来,类里面试包含方法以及变量的,是可以随便被类调用,那么对象可以使用的就是实例里的方法和变量,这便组成了类和对象的使用。
  • [技术干货] python空元组在all中返回结果详解
    我们可以把需要判断的对象放在程序中,那么执行出来会有两个结果,要么是真,要么为假。我们今天所要讲的all函数就是用来判断参数的程序,根据输入参数的不同,输出True或者False的结果。下面我们就all函数进行说明、语法等方面的了解, 然后通过实例探讨空元组的返回值结果。1.说明:接受一个可迭代器对象为参数,当参数为空或者不为可迭代器对象是报错12345>>> all(2) #传入数值报错Traceback (most recent call last): File "<pyshell#9>", line 1, in <module>  all(2)TypeError: 'int' object is not iterable如果可迭代对象中每个元素的逻辑值均为True时,返回True,否则返回False1234>>> all([1,2]) #列表中每个元素逻辑值均为True,返回TrueTrue>>> all([0,1,2]) #列表中0的逻辑值为False,返回FalseFalse如果可迭代对象为空(元素个数为0),返回True1234>>> all(()) #空元组True>>> all({}) #空字典True2.语法1all(iterable) # iterable -- 元组或列表。3.参数iterable -- 元组或列表。4.返回值如果iterable的所有元素不为0、''、False或者iterable为空,all(iterable)返回True,否则返回False;5.实例12345678910>>> any(())False>>> any([])False>>> any(['',0])False>>> any(['',0,'1'])True>>> any(['',0,False])False注意:空元组、空列表返回值为True,这里要特别注意。如何处理从python函数返回的空(无)元组我有一个函数,要么返回一个元组,要么返回None.呼叫者应该如何处理这种情况?12345678def nontest(): return None x,y = nontest() Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'NoneType' object is not iterableEAFP:1234try:  x,y = nontest()except TypeError:  # do the None-thing here or pass或者没有尝试 – 除外:12345res = nontest()if res is None:  ....else:  x, y = res
总条数:2474 到第 页
上滑加载中