混淆了使用shutil.copyfile和os.makedirs进行异常处理

时间:2017-06-22 22:11:16

标签: python

我一直在读你不应该只是使用'传递'在python中使用try / except时。我有几种使用它的情况:

  source = r'//' + servername + '/c$/remotedir/'
  dest = r"../myprogdir"
  file = "myconfig.exe.config"
  if os.path.isfile(os.path.join(source, file)):  # isfile checks if filename already exists on remote computer
      try:
          shutil.copyfile(os.path.join(source, file), os.path.join(dest, file))

      except:
          print (" Local directory you are copying to does not exist.")
  else:
      print (" ...filename does not exist...")

import spray.httpx.SprayJsonSupport._

问题是,我正在使用这些功能,我在列表中运行多台计算机。如果我抛出一个错误,如计算机关闭/关闭或目录/文件名不存在,我只想跳过它到我列表中的下一个计算机名称。

在这种情况下使用pass是否可以?我想如果运行我的程序的用户没有执行某些功能的权限,可能会发生一些事情。

我需要在什么情况下使用正确的异常处理?

如何写出权限异常错误?这是唯一可能导致程序出现问题的事情。即使运行该程序的唯一人员仍应具有适当的权限。

1 个答案:

答案 0 :(得分:0)

不要认为pass语句与异常处理本身有关。

pass语句只说“这个空间故意留空”。 pass只是告诉Python解释器这里没有任何反应,这不是语法错误。

在异常处理之外,还有其他情况pass很有用。例如,也许你想要定义一个实际上没有做任何事情的类,但是它继承自另一个类而不改变任何东西:

class Person(object):
    pass

class Man(Person):
    """A manly person"""

class Woman(Person):
    pass

在这里,我们有3个类,其中没有一个类具有超出object继承的方法。

请注意,我在pass中添加了Man语句,而不是pass语句。这在类/函数/方法定义的上下文中在功能上等同于pass。 (但是,您不能通过文档字符串替换except块中的except

要回到您的问题,请将pass块视为当某些内容没有按照您希望的方式运行时运行的代码。在这里,您说的是raise,也就是说,“只是忽略任何错误”。

您还可以使用简单的pass语句而不是try来将异常传播到封闭块,一直到调用堆栈。这在功能上等同于完全省略except / {{1}}块。

你也可以在这里做更多的事情。根据您希望应用程序在遇到尝试执行某些有用操作的失败时的行为方式,您可以记录消息,中断循环,重新排队操作以便稍后重试,增加错误计数器等等