小编And*_*ger的帖子

类定义中的Python非局部语句

我正在尝试对Python 3源代码中的范围进行一些分析,而我仍然坚持非局部语句语句在类定义中的工作方式.

据我了解,类定义在新的命名空间(称为dict)中执行其主体,并将类名绑定到类型(name,bases,dict)的结果.非局部x应该起作用,只要它引用一个绑定在非局部范围内某处的变量.

从这里我希望编译和运行以下代码:

class A:
    v = 1
    class B:
        nonlocal v
        v = 2
Run Code Online (Sandbox Code Playgroud)

但这失败了

SyntaxError: no binding for nonlocal 'v' found
Run Code Online (Sandbox Code Playgroud)

而以下代码运行完美

def A():
    v = 1
    class B:
        nonlocal v
        v = 2
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释函数定义的闭包和类定义之间的区别吗?

python class python-3.x python-nonlocal

10
推荐指数
2
解决办法
3687
查看次数

为什么我的Service Fabric代码会锁定自己的PDB?

我正在开发一个Service Fabric应用程序,它包含许多无状态服务和单个有状态服务.当我第一次发布时,一切都很好,它已部署到我的本地群集.在此之后,如果我尝试打包或发布应用程序而不首先明确地停止它,我会收到以下错误:

CSC:错误CS2012:无法打开'C:...\ProjectFolder\_obj\x64\Debug\ProjectName.pdb'进行写入 - '进程无法访问文件'C:...\ProjectFolder\_ obj\x64\Debug\ProjectName.pdb'因为它正被另一个进程使用.

根据进程资源管理器,PDB被我自己的ProjectName.exe锁定.这是我的应用程序中的单个有状态服务.

  1. 为什么我的exe会锁定自己的PDB?我能理解它是否是Visual Studio所做的.
    • 我在自己的代码中看不出任何应该导致这种情况的内容,所以我假设它是我正在调用的Fabric代码中的内容.
  2. PDB与应用程序一起部署,但是原始源目录中的文件被锁定 - 为什么不运行代码旁边的PDB?
  3. 为什么我只看到与有状态服务有关的错误,而不是无状态服务?
    • 我怀疑这与状态服务有关,在启动时会产生大量错误,Fabric可能需要符号来正确显示.
  4. 我怎么能阻止它发生 - 使用正确的PDB或根本不使用它们,除非我通过Visual Studio进行调试?

编辑:在github引发.目前的解决方法:

此时的当前解决方法是限制网络服务对构建文件夹(obj\x64\Debug)中的pdb的访问.

c# pdb-files visual-studio-2015 azure-service-fabric

6
推荐指数
1
解决办法
518
查看次数

从PathTooLongException中检索路径信息

我在.Net 4.0中使用DirectoryInfo和FileInfo来枚举目录树中的文件,并且我遇到了PathTooLongException.简化版本如下

public static class Test
{
    public static void Search(DirectoryInfo base)
    {
        foreach(var file in base.GetFiles())
        {
            try
            {
                Console.WriteLine(file.FullName);
            } catch(PathTooLongException ex)
            {
                // What path was this?
            }
        }
        foreach(var dir in base.GetDirectories())
        {
            Search(dir);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出错误时,我想知道导致问题的文件路径.显然我不能要求,FullName因为这是错误的.我可以从名字file.Name,但如果我不能得到路径的其余部分file.Directory给出了一个PathTooLongException即使DirectoryInfo该文件是从运行良好找到了!(我不能使用它,因为实际的代码要复杂得多).

通过堆栈跟踪查看它似乎正在使用内部路径(我看到受保护file.FullPath的调试),并尝试从完整(超大)路径中撕掉目录.大多数问题似乎都涉及到System.IO.Path.NormalizePath,我听说在.Net 4.0中经历了一些变化.我还没有尝试过该框架的早期版本.

我的问题:

  1. 如何从此异常中获取完整路径; 它似乎没有任何有用的信息.
  2. 为什么框架需要限制路径中的字符来切断文件名?

提前感谢任何帮助,
安迪

.net c# windows path pathtoolongexception

3
推荐指数
1
解决办法
2773
查看次数