Python os.makedirs try 以及 raise

转自:http://bookshadow.com/weblog/2014/10/02/python-mkdir-p/

http://blog.csdn.net/mr_jj_lian/article/details/6786052

mkdir为Linux操作系统中的创建目录命令,使用mkdir -p指令可以自动创建目标目录路径中尚不存在的上级目录(Windows操作系统也有同名的指令,用法稍有差别)。

Java的创建目录有mkdir和mkdirs两个方法,其中:

  • mkdir() :只能在已经存在的目录中创建创建文件夹。
  • mkdirs() :可以在不存在的目录中创建文件夹。

与Java类似,Python的os模块也存在两个函数,分别为mkdir和makedirs,其中:

  • mkdir( path [,mode] ):创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777。如果目录有多级,则创建最后一级。如果最后一级目录的上级目录有不存在的,则会抛出一个OSError。
  • makedirs( path [,mode] ):创建递归的目录树,可以是相对或者绝对路径,mode的默认模式是0777。如果子目录创建失败或者已经存在,会抛出一个OSError的异常,Windows上Error 183即为目录已经存在的异常错误。如果path只有一级,与mkdir相同。

对于Python 2.X(X > 2.5)版本,使用Python模拟实现Linux下的mkdir -p指令功能的代码如下:

import os, errnodef mkdir_p(path):try:os.makedirs(path)except OSError as exc: # Python >2.5 (except OSError, exc: for Python <2.5)if exc.errno == errno.EEXIST and os.path.isdir(path):passelse: raise
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

而对于Python 3.X(X >= 2)版本,os.makedirs 函数还有第三个参数 exist_ok,该参数为真时执行mkdir -p,但如果给出了mode参数,目标目录已经存在并且与即将创建的目录权限不一致时,会抛出OSError异常。



try语句是这样工作的:
  首先,运行try子句(在try和except之间的语句)。 
  如果没有发生例外,跳过except子句,try语句运行完毕。 
  如果在try子句中发生了例外错误而且例外错误匹配except后指定的例外名,则跳过try 子句剩下的部分,执行except子句,然后继续执行try语句后面的程序。 
  如果在try子句中发生了例外错误但是例外错误不匹配except后指定的例外名,则此例外被传给外层的try语句。如果没有找到匹配的处理程序则此例外称作是未处理例外,程序停止运行,显示错误信息。 
  try语句可以有多个except子句,为不同的例外指定不同处理。至多只执行一个错误处理程序。错误处理程序只处理相应的try子句中发生的例外,如果同try语句中其它的错误处理程序中发生例外错误处理程序不会反应。一个except子句可以列出多个例外,写在括号里用逗号分开,例如:
... except (RuntimeError, TypeError, NameError):
...     pass
  最后一个except子句可以省略例外名,作为一个通配项。这种方法要谨慎使用,因为这可能会导致程序实际已出错却发现不了。
  try ... except语句有一个可选的else子句,如有的话要放在所有except子句之后。else 的意思是没有发生例外,我们可以把try子句中没有发生例外时要做的事情放在这个子句里。例如:
for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print '不能打开', arg
    else:
        print arg, '有', len(f.readlines()), '行'
        f.close()
  例外发生时可能伴有一个值,叫做例外的参数。参数是否存在及其类型依赖于例外的类型。对于有参数的例外,except在自居可以在例外名(或表)后指定一个变量用来接受例外的参数值,如:
>>> try:
...     spam()
... except NameError, x:
...     print 'name', x, 'undefined'
... 
name spam undefined
  有参数的例外未处理时会在错误信息的最后细节部分列出其参数值。  
  例外处理程序不仅处理直接产生于try子句中的例外,也可以处理try子句中调用的函数(甚至是间接调用的函数)中的例外。如:
8.4 产生例外
  raise语句允许程序员强行产生指定的例外。例如: 
>>> raise NameError, 'HiThere'
Traceback (innermost last):
  File "", line 1
NameError: HiThere
  raise语句的第一个参数指定要产生的例外的名字。可选的第二参数指定例外的参数。  
8.5 用户自定义例外
  程序中可以定义自己的例外,只要把一个字符串赋给一个变量即可。例如: 
>>> my_exc = 'my_exc'
>>> try:
...     raise my_exc, 2*2
... except my_exc, val:
...     print 'My exception occurred, value:', val
... 
My exception occurred, value: 4
>>> raise my_exc, 1
Traceback (innermost last):
  File "", line 1
my_exc: 1
  许多标准模块用这种方法报告自己定义的函数中发生的错误。  
8.6 定义清理动作
  try语句还有另一个finally可选子句,可以用来规定不论出错与否都要执行的动作。例如: 
>>> try:
...     raise KeyboardInterrupt
... finally:
...     print 'Goodbye, world!'
... 
Goodbye, world!
Traceback (innermost last):
  File "", line 2
KeyboardInterrupt
  finally子句不论try子句中是否发生例外都会执行。例外发生时,先执行finally子句然后重新提出该例外。当try语句用break或return语句退出时也将执行finally子句。
  要注意的是,try语句有了except子句就不能有finally子句,有了finally子句就不能有except 子句,不能同时使用except子句和finally子句。需要的话可以嵌套。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core 3.0 中使用 swagger

asp.net core 3.0 中使用 swaggerIntro上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用&#xff0c;那个项目的 api 比较简单&#xff0c;都是匿名接口不涉及到认证以及 api 版本控制&#xff0c;最近把另外一个 api 项目升级到了 3.0&#xff0c;还是遇到了一些…

由微软100题“求和不用for while”引出的static类成员的知识

转自&#xff1a;http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html C类中谈到static,我们可以在类中定义static成员&#xff0c;static成员函数&#xff01;Cprimer里面讲过&#xff1a;static成员它不像普通的数据成员&#xff0c;static数据成员独立于该类的任意…

MCN是啥?了解一下这5个互联网热词

骗子刷量&#xff0c;黑吃黑半斤八两前几天一件事火爆了互联网圈&#xff0c;一场搞笑的骗局&#xff0c;一场蜂群传媒导演的“僵尸舞台剧”&#xff1a;一条一夜爆红的视频 流量却为0&#xff01;。一个电商商家卖产品有投放需求&#xff0c;找到了微博上一家 MCN 机构的一个女…

Matlab出现On Startup: Error using eval undefined function 'workspacefunc' for input arguments of type

按照提示 Warning: MATLAB did not appear to successfully set the search path. To recover for this session of MATLAB, type "restoredefaultpath;matlabrc". To find out how to avoid this warning the next time you start MATLAB, type "docsearch pr…

为什么我不建议你去外包公司?

前言在我离开上家公司之前&#xff0c;我的直属领导找我聊了一番。除了问候我有没有找好下家之外&#xff0c;还千叮咛万嘱咐我千万不要去外包公司&#xff0c;否则会在简历上留下无法磨灭的污点。当时的我对于外包公司的了解并不深&#xff0c;只是道听途说外包公司很坑&#…

x 的平方根

题目描述 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根&#xff0c;其中 x 是非负整数。 由于返回类型是整数&#xff0c;结果只保留整数的部分&#xff0c;小数部分将被舍去。 示例 1: 输入: 4 输出: 2示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由…

Caffe编译代码的时候报各种未定义未声明

自己装的CUDNN是一个版本&#xff0c;而运行别人的code时可能人家对应CUDNN的另一个版本&#xff0c;此时需要修改关键字来兼容版本&#xff0c;参考 1. https://github.com/BVLC/caffe/issues/1792 https://github.com/BVLC/caffe/pull/1739 https://github.com/BVLC/ca…

友浩达优选上新,原生态农产品,买得安心,吃得放心

大闸蟹还在热卖&#xff0c;需要的同学可以访问 各位一直支持队长的朋友们友浩达优选上新了本着为大家推荐好东西的想法商城里上架的商品都是队长亲自挑选有质量保证的口碑好商品这次&#xff0c;来看看队长又给大家带了哪些好东西本次上新全是各地优选原生态农产品食品优质、安…

判别学习与生成学习的区别

参照http://blog.csdn.net/daijiguo/article/details/52218207 比如二类分类问题&#xff0c;不管是感知器算法还是逻辑斯蒂回归算法&#xff0c;都是在解空间中寻找一条直线从而把两种类别的样例分开&#xff0c;对于新的样例只要判断在直线的哪一侧即可&#xff1b;这种直接对…

树莓派4上跑 .NET Core 3.0,这次,真·64位!

导语前不久我写了一篇《Gentoo由于 Windows 10 IoT Core &#xff08;以及上面的UWP们&#xff09;暴尸荒野而苟且偷生使用 Linux 的我&#xff0c;已经彻底开荤了。最近我发现有个叫 Gentoo 的 Linux 系统&#xff0c;支持树莓派4的64位CPU。项目地址&#xff1a;https://gith…

微软100题第20题

http://blog.csdn.net/zwb8848happy/article/details/7340634 输入一个表示整数的字符串&#xff0c;把该字符串转换成整数并输出 //Analysis: //1. Whether it is a negative number //2. Whether there exist other characters that do not represent numbers //#includ…

asp.net core 使用 AccessControlHelper 控制访问权限

asp.net core 使用 AccessControlHelper 控制访问权限Intro由于项目需要&#xff0c;需要在基于 asp.net mvc 的 Web 项目框架中做权限的控制&#xff0c;于是才有了这个权限控制组件&#xff0c;最初只是支持 netframework&#xff0c;后来 dotnetcore 2.0 发布了之后添加了对…

Caffe 增加自定义 Layer 及其 ProtoBuffer 参数

转载自&#xff1a;http://blog.csdn.net/kkk584520/article/details/52721838 http://blog.csdn.net/kkk584520 博客内容基于新书《深度学习&#xff1a;21 天实战 Caffe》&#xff0c;书中课后习题答案欢迎读者留言讨论。以下进入正文。 在使用 Caffe 过程中经常会有这样的…

.NET Core 3.0愈加成熟,微软将不再把.NET Framework API移植给它

目前 .NET Core 3.0 拥有的 API 总数约为 .NET Framework API 的 80%&#xff0c;剩下尚未从 .NET Framework 移植到 .NET Core 的 API&#xff0c;微软考虑以开源的形式发布。微软方面表示&#xff0c;通过 .NET Core 3.0&#xff0c;他们现在已具备轻松移植现代 workload 所需…

开发问题记录

1、MySQL死锁问题解决 Waiting for table metadata lock &#xff1a; Alter table qimao.qimao_content_distribute drop index idx_content_id,add UNIQUE ind直接执行 kill id&#xff0c;杀掉死锁进程即可 2、Mybatis 自动生成 使用MyBatis Generator自动生成实体、…

参加 JSConf China 2019 是怎样的体验?VS Code 和 TypeScript 都很火

JSConf China 2019 于 10 月 19-20 日于上海尚浦中心举行。很高兴作为讲师参加这次的 JSConf。Day 1在 Day 1 给大家聊了聊 The Beauty of TypeScript。简单总结下我讲的 TypeScript 的 session。千言万语&#xff0c;汇聚成下面两页的 PPT。TypeScript 的使用场景&#xff08;…

记一次应用配置的数据库连接被打满问题

线上应用&#xff0c;配置的数据库连接数为50&#xff0c;正常情况是已经够用了&#xff0c;但是有天发现50个连接全部被占满&#xff0c;并且长时间无法恢复&#xff0c;重启服务后会好一段时间。 1、问题现象 Druid获取MySQL数据库连接超时&#xff0c;超时时间设置的为60s…

Caffe阅读代码并修改

这个教程是最好理解的了 http://city.shaform.com/blog/2016/02/26/caffe.html 主要分成四個部份來講。首先是整個 Caffe 的大架構&#xff0c;以及一些重要的元件。 其次&#xff0c;我也研究了如何自己新增一個 layer。 接下來&#xff0c;再重新回到 Caffe 做更深入的解析…

ABP v1.0正式发布

经过长时间的开发终于发布了ABP v1.0&#xff01;感谢为该项目做出了贡献的你~https://github.com/abpframework/abp/releases