我正在尝试对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)
任何人都可以解释函数定义的闭包和类定义之间的区别吗?
我正在开发一个Service Fabric应用程序,它包含许多无状态服务和单个有状态服务.当我第一次发布时,一切都很好,它已部署到我的本地群集.在此之后,如果我尝试打包或发布应用程序而不首先明确地停止它,我会收到以下错误:
CSC:错误CS2012:无法打开'C:...\ProjectFolder\_obj\x64\Debug\ProjectName.pdb'进行写入 - '进程无法访问文件'C:...\ProjectFolder\_ obj\x64\Debug\ProjectName.pdb'因为它正被另一个进程使用.
根据进程资源管理器,PDB被我自己的ProjectName.exe锁定.这是我的应用程序中的单个有状态服务.
此时的当前解决方法是限制网络服务对构建文件夹(obj\x64\Debug)中的pdb的访问.
我在.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中经历了一些变化.我还没有尝试过该框架的早期版本.
我的问题:
提前感谢任何帮助,
安迪